2013-10-07 51 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); 
相关问题