我的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"?
答案 0 :(得分:0)
您链接到的文章(特别是在谈论ZFS时)表示这些文件操作都没有保证在回调完成时写入数据。但是,流的finish
事件表示:
调用end()方法后,刷新所有数据 对于底层系统,会发出此事件。
因此,您可以使用createWriteStream
,在finish
事件中写入并导入您的子进程。如果我正确地解释文档,您的文件将在那里并且其中包含内容。