FS文件守望者,得到的变化

问题描述 投票:0回答:1

我想实现如何使用Node.js一个文件系统观察,使其手表更改特定的JSON文件。

然后,我想获得的文件里面有什么改变。

javascript node.js json
1个回答
2
投票

这里有一种方法:

  • 加载当前文件内容,并将其解析为一个对象,将其保持在存储器中。
  • 留意文件的更改,使用fs.watch
  • 在变化,加载新的文件内容的对象。
  • 执行当前对象和新对象之间的对象的diff; e.g使用diff
  • 设置当前对象作为新对象。
  • 重复上的变化。

下面是一个例子:

const fs = require('fs')
const diff = require('deep-diff')

const filepath = './foo.json'
const getCurrent = () => JSON.parse(fs.readFileSync(filepath, {
  encoding: 'utf8'
}))

let currObj = getCurrent()

fs.watch(filepath, { encoding: 'buffer' }, (eventType, filename) => {
  if (eventType !== 'change') return

  const newObj = getCurrent()
  const differences = diff(currObj, newObj)

  console.log(differences)
  // { kind: 'N' } for new key additions
  // { kind: 'E' } for edits
  // { kind: 'D' } for deletions

  currObj = newObj
})

请注意,我用fs.readFileSync这里赘述。您应该关闭使用fs.readFile反而是无阻塞更好。

© www.soinside.com 2019 - 2024. All rights reserved.