【问题标题】:FS file watcher, get changesFS 文件观察器,获取更改
【发布时间】:2019-02-04 23:37:04
【问题描述】:

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

然后,我想了解文件内部的变化。

【问题讨论】:

    标签: javascript node.js json


    【解决方案1】:

    这是一种方法:

    • 加载当前文件内容并将其解析为一个对象,并将其保存在内存中。
    • 注意文件更改,使用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 来代替它是非阻塞的。

    【讨论】:

    • 我无法期待更好的答案。我还有最后一个问题,例如 console.log 怎么可能只有路径的一个元素?提前致谢 ! =)
    • “路径的一个元素”是什么意思?什么是路径,什么是元素?
    • 当我在我的 json 文件中修改某些内容时,它会返回如下内容:i.imgur.com/gs7Jiir.png 例如,console.log 只能是“路径”,或者更好的是“购买”在路径中。
    • @Zayonx 这是我在示例中包含的diff 模块返回的差异。你最好阅读它的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多