在Windows上Node.js 0.12.7 writeFileSync和子进程

时间:2015-07-30 02:02:14

标签: node.js

我的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"?

1 个答案:

答案 0 :(得分:0)

您链接到的文章(特别是在谈论ZFS时)表示这些文件操作都没有保证在回调完成时写入数据。但是,流的finish事件表示:

  

调用end()方法后,刷新所有数据   对于底层系统,会发出此事件。

因此,您可以使用createWriteStream,在finish事件中写入并导入您的子进程。如果我正确地解释文档,您的文件将在那里并且其中包含内容。