Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs require()来自文件垃圾收集的json_Node.js_Garbage Collection - Fatal编程技术网

Node.js nodejs require()来自文件垃圾收集的json

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

我使用一个文件来存储JSON数据。我的模块对文件执行CRUD操作,我使用
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'),你不应该有同样的问题