我有一個關於在節點中加載外部文件的問題。Node.js每n分鐘重新加載一次外部文件
基本上我正在加載包含一些配置的外部JSON文件,並且此文件每10分鐘由外部進程修改。我怎樣才能每10分鐘重新加載一次該文件,而無需重新啓動節點?
我試過這個解決方案:
delete require.cache['/home/conf/myfile.json']
但有些人反對建議。有誰能夠幫助我?
我有一個關於在節點中加載外部文件的問題。Node.js每n分鐘重新加載一次外部文件
基本上我正在加載包含一些配置的外部JSON文件,並且此文件每10分鐘由外部進程修改。我怎樣才能每10分鐘重新加載一次該文件,而無需重新啓動節點?
我試過這個解決方案:
delete require.cache['/home/conf/myfile.json']
但有些人反對建議。有誰能夠幫助我?
最後我改變了我的代碼,現在我使用fs.readFile來加載我的json文件,而不是使用require。
然後我使用node-watch檢查文件中的更改並重新加載它。
情侶選項。您可以使用setInterval 10分鐘並在回調中讀取文件。否則,您可以使用fs.watch並在文件實際更改時觸發重新加載。基於評論
如果您使用需要
更新,它只會加載文件一次,不管你有多少次需要它並沒有一個真正的機制來invalidate a required file。你可以創建一個包裝的功能,並要求相反。你的包裝是你需要的文件,它暴露了一個函數返回你當前的配置。在該模塊內部,您可以創建上面提到的setTimeout刷新。
你可以看看我的module-invalidate模塊,它允許你使所需的模塊無效。然後該模塊將在進一步訪問時自動重新加載。
例子:
模塊./myModule.js
module.invalidable = true;
var count = 0;
exports.count = function() {
return count++;
}
主要模塊./index.js
require('module-invalidate');
var myModule = require('./myModule.js');
console.log(myModule.count()); // 0
console.log(myModule.count()); // 1
setInterval(function() {
module.constructor.invalidateByExports(myModule);
console.log(myModule.count()); // 0
console.log(myModule.count()); // 1
}, 10*60*1000);
你是如何開始加載文件? –
@ExplosionPills我加載它像一個模塊:var myfile = require('./ myconf.json'); – Giangi