Node.js每隔n分钟重新加载外部文件

时间:2013-10-07 20:54:41

标签: javascript json node.js

我有一个关于在节点中加载外部文件的问题。

基本上我正在加载包含一些配置的外部JSON文件,并且该文件每10分钟由外部进程修改一次。如何在不重启节点的情况下每10分钟重新加载一次该文件?

我尝试过这个解决方案:

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

但是有些人建议不要这样做。有人能帮助我吗?

3 个答案:

答案 0 :(得分:4)

最后我改变了我的代码,现在我使用fs.readFile来加载我的json文件,而不是使用require。

然后我使用node-watch检查文件中的更改并重新加载。

答案 1 :(得分:2)

情侣选择。您可以使用setInterval 10分钟并在回调中读取文件。否则,您可以使用fs.watch并在文件实际更改时触发重新加载。

根据评论进行更新

如果你正在使用require,它只会加载文件一次,无论你需要多少次,而且invalidate a required file没有真正的机制。您可以围绕功能创建一个包装器,并要求它。您的包装器是您需要的文件,它公开了一个返回当前配置的函数。在该模块中,您可以创建上面提到的setTimeout刷新。

答案 2 :(得分: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);