2014-01-10 106 views
0

我正在使用一個文件來存儲JSON數據。我的模塊對文件進行CRUD操作,我使用require()加載json,而不是fs.readFile()。問題是,如果文件被刪除,使用fs.unlink(),然後使用require再次調用該文件仍將加載剛被刪除的文件...。我有點失落如何解決這個問題,可能#垃圾收集?nodejs require()從文件垃圾回收JSON

例子:

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) 
    }) 
}) 
+1

'require'用於穩定的文件,它仍然顯示,因爲它在瀏覽器緩存中。所以你的選擇是:1.破壞緩存,2.使用'fs.readFile()'代替。我的投票是針對後者的。 –

+0

會在這裏同意你的意見。認爲我期望減少回撥地獄,而不是其他任何事情。 @RobertHarvey你想把這個作爲答案,我會檢查它 –

回答

2

當加載使用require模塊,Node.js的內部緩存加載模塊,以便隨後對require調用不需要再次訪問該驅動器。使用require加載時,.json文件也是如此。

這就是爲什麼你的文件仍然「加載」,雖然你刪除它。

此問題的解決方案是使用函數來加載適用於它的文件,您已經提到過:fs.readFile()。一旦你使用它,一切都會按預期工作。

+0

如果你刪除這樣的要求緩存 - 刪除require.cache [require.resolve('file.json')]你不應該有同樣的問題 –