更新变量中正在使用的文件

时间:2018-07-17 03:55:35

标签: javascript node.js

我正在使用一个变量来存储一个json文件,该文件在我的代码中用作引用。我有一个代码,检查变量是否过时。如果已过时,则会从其源进行更新。

const someFile = require('./something.json')

每次文件过时,程序都会尝试更新它。它成功了。但是,nodejs继续使用旧的.json文件(已被替换)作为参考。使我的代码输出过时的响应。

那么我如何告诉node.js使用更新的文件?预先谢谢你!

3 个答案:

答案 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 } }