steno

2020-01-15

steno

Simple file writer with race condition prevention and atomic writing

">steno

Simple file writer with atomic writingand race condition prevention.

Can be used as a drop-in replacement to fs.writeFile().

Built on graceful-fsand used in lowdb.

Install

npm install steno --save

Usage

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:

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:

// In your server
data.counter === 1000

// In data.json
data.counter === 865 // ... or any other value

Why? Because, fs.writedoesn't guarantee that the call order will be kept. Also, if the server is killed while data.jsonis being written, the file can get corrupted.

With steno

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

以上是 steno 的使用教程帮助文档。


上一篇:dbmmods
下一篇:react-native-camera-roll-picker
相关教程
关注微信

扫码加入 JavaScript 社区

相关文章
暂无相关文章

首次访问,需要验证
微信扫码,关注即可
(仅需验证一次)

欢迎加入 JavaScript 社区

号内回复关键字:

回到顶部