我正在尝试更新节点服务器上的文件内容,但fs.writeFileSync无法写入指定的文件而不会抛出任何错误,我在代码中的其他方法中有相同的确切行但是这个特定的行不是执行写操作,也不会抛出任何错误。
"negotiate": function(menu){
if (menu) {
//this would be changed later to the appropraite request
//get url from menu
//getting task list quesions
menu = fs.readFileSync(rootPath + menu.output, 'utf8');
menu = JSON.parse(menu);
}
var userData = fs.readFileSync(this.pathToUserTable(), 'utf8');
userData = JSON.parse(userData);
userData = this.updateUserDataForNegotiate(userData, menu);
//fs.unlinkSync(this.pathToUserTable());
try{
fs.writeFileSync(this.pathToUserTable(), JSON.stringify(userData));//not writing to file
} catch(err){
console.log(err);//no error thrown
}
this.res.send(menu);
},
this.pathToUserTable()
返回rootPath + "/database/users/" + this.req.query.msisdn + ".json"
的等效内容,其中var rootPath = path.normalize(__dirname + "/../../");
。我已经测试了这种方法并且确定它有效。
我也确定这也会返回适当的日期JSON.stringify(userData)
。
此时我认为这很奇怪。
刚补充说我在fs write方法中添加了一个超时并且它有效,我猜这个文件在调用这个fs write方法时是不可用的,所以写不会发生。
var that = this;
setTimeout(function(){
fs.writeFileSync(that.pathToUserTable(), JSON.stringify(userData));
console.log(that.pathToUserTable(), " ", JSON.stringify(userData));
}, 5);
那么在做这个之前我该如何等待之前的fs.writeFileSync
方法完成呢?