我正在使用一个变量来存储一个json文件,该文件在我的代码中用作引用。我有一个代码,检查变量是否过时。如果已过时,则会从其源进行更新。
const someFile = require('./something.json')
每次文件过时,程序都会尝试更新它。它成功了。但是,nodejs继续使用旧的.json文件(已被替换)作为参考。使我的代码输出过时的响应。
那么我如何告诉node.js使用更新的文件?预先谢谢你!
答案 0 :(得分:0)
您的问题出在const
关键字上,当将值赋给常量时,它无法更改(Info),只需使用let
关键字,您的代码就可以工作。 / p>
更新
如果两个文件都存在:
let someFile= require('./ab.json')
console.log(someFile); // Will Print content of ab.json
someFile= require('./bc')
console.log(someFile); // Will Print content of bc.json
但这仅适用于应用程序启动时已经存在的文件。因此,对于运行时创建的文件,您不能使用require,因为您需要另一个选项,例如fs模块(Docs Node 8.x)
PS :虽然这是有效的解决方案,但如果文件是json并定期更改,则可以使用redis和Keyspace Notifications(如果这是一个大型应用程序),而不是fs即可。走。
答案 1 :(得分:0)
如Require Documentation中所述,require
将缓存文件,因此即使您更新文件并再次使用require
获取文件,也不会看到更改。
每次您自己都要读取文件
var fs = require('fs');
var data = fs.readFileSync('something.json', 'utf8');
var someFile = JSON.parse(data);
答案 2 :(得分:0)
// myjson.json
{
"data": {
"name": "uday",
"age": 25
}
}
controller.js
var myJSON = require('./myjson.json');
var fs = require('fs');
console.log("before change-->", myJSON);
myJSON.data.age = 26;
console.log("after change-->", myJSON);
fs.writeFileSync('myjson.json', JSON.stringify(myJSON));
控制台结果
before change--> { data: { name: 'uday', age: 25 } }
after change--> { data: { name: 'uday', age: 26 } }