我的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/