Node.js nodejs require()来自文件垃圾收集的json
我使用一个文件来存储JSON数据。我的模块对文件执行CRUD操作,我使用Node.js nodejs require()来自文件垃圾收集的json,node.js,garbage-collection,Node.js,Garbage Collection,我使用一个文件来存储JSON数据。我的模块对文件执行CRUD操作,我使用require()来加载json,而不是fs.readFile()。问题是,如果使用fs.unlink()删除该文件,然后使用require再次调用该文件,仍然会加载该文件。。。刚刚被删除了。我有点不知所措,怎么避开这个,可能是垃圾收集 例如: fs.writeFile('foo.json', JSON.stringify({foo:"bar"}), function(){ var j = require('./f
require()
来加载json,而不是fs.readFile()
。问题是,如果使用fs.unlink()
删除该文件,然后使用require
再次调用该文件,仍然会加载该文件。。。刚刚被删除了。我有点不知所措,怎么避开这个,可能是垃圾收集
例如:
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
加载模块时,Node.js会在内部缓存加载的模块,以便对require
的后续调用无需再次访问驱动器。当使用require
加载时,.json
文件也是如此
这就是为什么你的文件仍然是“加载的”,尽管你删除了它
此问题的解决方案是使用函数加载适合它的文件,您已经提到:
fs.readFile()
。一旦您使用它,一切都会按预期工作。require
用于稳定的文件,它仍然会显示,因为它位于浏览器缓存中。所以你的选择是:1。摧毁缓存,2。改用fs.readFile()
。我投后者的票。我会同意你的意见。我想我是想减少更多的麻烦@RobertHarvey你想把这个作为一个答案,我会检查它如果你像这样删除require缓存-delete require.cache[require.resolve('file.json'),你不应该有同样的问题