Roughing out the demo app
This commit is contained in:
79
node_modules/steno/README.md
generated
vendored
Normal file
79
node_modules/steno/README.md
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
# steno [](https://www.npmjs.org/package/steno) [](https://travis-ci.org/typicode/steno)
|
||||
|
||||
> Simple file writer with __atomic writing__ and __race condition prevention__.
|
||||
|
||||
Can be used as a drop-in replacement to `fs.writeFile()`.
|
||||
|
||||
Built on [graceful-fs](https://github.com/isaacs/node-graceful-fs) and used in [lowdb](https://github.com/typicode/lowdb).
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
npm install steno --save
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```javascript
|
||||
const steno = require('steno')
|
||||
|
||||
steno.writeFile('file.json', data, err => {
|
||||
if (err) throw err
|
||||
})
|
||||
```
|
||||
|
||||
## The problem it solves
|
||||
|
||||
### Without steno
|
||||
|
||||
Let's say you have a server and want to save data to disk:
|
||||
|
||||
```javascript
|
||||
var data = { counter: 0 }
|
||||
|
||||
server.post('/', (req, res) => {
|
||||
// Increment counter
|
||||
++data.counter
|
||||
|
||||
// Save data asynchronously
|
||||
fs.writeFile('data.json', JSON.stringify(data), err => {
|
||||
if (err) throw err
|
||||
res.end()
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
Now if you have many requests, for example `1000`, there's a risk that you end up with:
|
||||
|
||||
```javascript
|
||||
// In your server
|
||||
data.counter === 1000
|
||||
|
||||
// In data.json
|
||||
data.counter === 865 // ... or any other value
|
||||
```
|
||||
|
||||
Why? Because, `fs.write` doesn't guarantee that the call order will be kept. Also, if the server is killed while `data.json` is being written, the file can get corrupted.
|
||||
|
||||
### With steno
|
||||
|
||||
```javascript
|
||||
server.post('/increment', (req, res) => {
|
||||
++data.counter
|
||||
|
||||
steno.writeFile('data.json', JSON.stringify(data), err => {
|
||||
if (err) throw err
|
||||
res.end()
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
With steno you'll always have the same data in your server and file. And in case of a crash, file integrity will be preserved.
|
||||
|
||||
if needed, you can also use `steno.writeFileSync()` which offers atomic writing too.
|
||||
|
||||
__Important: works only in a single instance of Node.__
|
||||
|
||||
## License
|
||||
|
||||
MIT - [Typicode](https://github.com/typicode)
|
||||
Reference in New Issue
Block a user