summaryrefslogtreecommitdiff
path: root/node_modules/steno/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/steno/README.md')
-rw-r--r--node_modules/steno/README.md79
1 files changed, 79 insertions, 0 deletions
diff --git a/node_modules/steno/README.md b/node_modules/steno/README.md
new file mode 100644
index 0000000..119fddc
--- /dev/null
+++ b/node_modules/steno/README.md
@@ -0,0 +1,79 @@
+# steno [![](http://img.shields.io/npm/dm/steno.svg?style=flat)](https://www.npmjs.org/package/steno) [![](https://travis-ci.org/typicode/steno.svg?branch=master)](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)