我有一个关于在节点中加载外部文件的问题。
基本上我正在加载包含一些配置的外部JSON文件,并且该文件每10分钟由外部进程修改一次。如何在不重启节点的情况下每10分钟重新加载一次该文件?
我尝试过这个解决方案:
delete require.cache['/home/conf/myfile.json']
但是有些人建议不要这样做。有人能帮助我吗?
答案 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);