FS文件观察器,获取更改

时间:2019-02-04 23:37:04

标签: javascript node.js json

我想使用node.js实现文件系统监视程序,以便它监视特定JSON文件的更改。

然后,我想获取文件内部的更改。

1 个答案:

答案 0 :(得分:2)

这是一种方法:

  • 加载当前文件内容并将其解析为一个对象,并将其保留在内存中。
  • 使用fs.watch监视文件更改。
  • 更改后,将新文件的内容作为对象加载。
  • 在当前对象和新对象之间执行对象区分;例如使用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而不是非阻塞。