我有一个关于在节点中加载外部文件的问题。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