我的nodejs代码将http请求写入JSON文件,然后根据该写入的JSON文件中的参数调用子进程来运行。

app.post("/run_with_parameters", function(req, res){
     fs.writeFileSync("parameters.json", JSON.stringify(req.body));
     child_process.stdin.write("parameters.json"); //child process will read json and act accordingly
});


在Windows计算机上,“子进程”有时会获得旧参数,而不是新参数,我怀疑这是因为fs.writeFileSync在返回运行下一条语句之前没有完成对磁盘的写入。 (根据this post)。

这是Node.js的错误/功能吗?还是仅存在于Windows计算机上?

如果这样编码会更好吗?

app.post("/run_with_parameters", function(req, res){
     fs.writeFile("parameters.json", JSON.stringify(req.body), function(){
       child_process.stdin.write("parameters.json"); //child process will read json and act accordingly

     });
});


这是否可以确保“子进程”始终获得更新的“ parameters.json”?

最佳答案

链接到的文章(特别是在谈论ZFS时)指出,这些文件操作均不能保证回调完成后就已写入数据。但是,流的finish事件表示:


  调用end()方法并且已刷新所有数据后
  到底层系统,将发出此事件。


因此,您可以使用createWriteStream进行写入,并在finish事件上通过管道传递给子进程。如果我正确地解释了文档,则您的文件将在那里并包含其中的内容。

关于node.js - Windows上的Node.js 0.12.7 writeFileSync和子进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31714042/

10-11 11:32