我想使用 node.js 实现一个文件系统观察器,以便它监视特定 JSON 文件的更改。
然后,我想了解文件内部发生了什么变化。
最佳答案
这是一种方法:
- 加载当前文件内容并将其解析为对象,并将其保留在内存中。
- 使用 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
来代替。
关于javascript - FS 文件观察器,获取更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525895/