2013-10-07 48 views
1

我有一個關於在節點中加載外部文件的問題。Node.js每n分鐘重新加載一次外部文件

基本上我正在加載包含一些配置的外部JSON文件,並且此文件每10分鐘由外部進程修改。我怎樣才能每10分鐘重新加載一次該文件,而無需重新啓動節點?

我試過這個解決方案:

delete require.cache['/home/conf/myfile.json'] 

但有些人反對建議。有誰能夠幫助我?

+0

你是如何開始加載文件? –

+0

@ExplosionPills我加載它像一個模塊:var myfile = require('./ myconf.json'); – Giangi

回答

4

最後我改變了我的代碼,現在我使用fs.readFile來加載我的json文件,而不是使用require。

然後我使用node-watch檢查文件中的更改並重新加載它。

2

情侶選項。您可以使用setInterval 10分鐘並在回調中讀取文件。否則,您可以使用fs.watch並在文件實際更改時觸發重新加載。基於評論

如果您使用需要

更新,它只會加載文件一次,不管你有多少次需要它並沒有一個真正的機制來invalidate a required file。你可以創建一個包裝的功能,並要求相反。你的包裝是你需要的文件,它暴露了一個函數返回你當前的配置。在該模塊內部,您可以創建上面提到的setTimeout刷新。

0

你可以看看我的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); 
相關問題