【问题标题】:nodejs require() json from file garbage collectionnodejs require() 来自文件垃圾收集的 json
【发布时间】:2014-01-10 22:00:31
【问题描述】:

我正在使用一个文件来存储 JSON 数据。我的模块对文件进行 CRUD 操作,我使用 require() 加载 json,而不是 fs.readFile()。问题是,如果文件被删除,使用fs.unlink(),然后使用require 再次调用文件仍然加载文件......刚刚被删除。我有点迷失如何解决这个问题,可能是#garbage-collection?

例子:

fs.writeFile('foo.json', JSON.stringify({foo:"bar"}), function(){

    var j = require('./foo.json')

    fs.unlink('./foo.json', function(){
        console.log('File deleted')
        var j = require('./foo.json')
        console.log(j)
    })
})

【问题讨论】:

  • require 用于稳定文件,它仍然显示,因为它在浏览器缓存中。所以你的选择是:1.破坏缓存,2.改用fs.readFile()。我的投票是后者。
  • 在这里同意你的看法。认为我希望减少回调地狱比其他任何事情都重要。 @RobertHarvey 你想把它作为答案,我会检查它

标签: node.js garbage-collection


【解决方案1】:

当使用require 加载模块时,Node.js 会在内部缓存加载的模块,以便后续对require 的调用无需再次访问驱动器。当使用 require 加载时,.json 文件也是如此。

这就是为什么您的文件仍然“加载”的原因,尽管您已将其删除。

解决这个问题的方法是使用函数来加载适合它的文件,你已经提到过:fs.readFile()。一旦你使用它,一切都会按预期工作。

【讨论】:

  • 如果你像这样删除 require 缓存 - delete require.cache[require.resolve('file.json')] 你不应该有同样的问题
猜你喜欢
  • 2012-10-06
  • 2021-10-18
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多