Javascript fs.writeFileSync未写入指定文件

Javascript fs.writeFileSync未写入指定文件,javascript,node.js,fs,Javascript,Node.js,Fs,我正在尝试更新节点服务器上的文件内容,但fs.writeFileSync无法写入指定的文件而不引发任何错误,我在代码中的其他方法中有相同的行,但此特定行未执行写入操作,也未引发任何错误 "negotiate": function(menu){ if (menu) { //this would be changed later to the appropraite request //get url from menu //getting t

我正在尝试更新节点服务器上的文件内容,但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(\uu 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
方法完成?

this.pathToUserTable()
返回的确切内容是什么?可能是因为文件路径不正确,请尝试通过另一种方式进行路径设置,就像使用
\uuuDirName+'../'
@farhadamjady
\uuuDirName
从不包含尾随斜杠,这样会失败。
fs.writeFileSync
的整个思想是它返回时已经完成。可能是
this.updateUserDataForConfertive
和/或
this.pathToUserTable
异步函数吗?@robertklep,不,它们根本不是,我正在考虑使用while语句检查文件内容是否等于
userData