Javascript 如何";适当地;在C+旁边使用NodeJ时,避免读/写文件的竞争条件+;软件?

Javascript 如何";适当地;在C+旁边使用NodeJ时,避免读/写文件的竞争条件+;软件?,javascript,node.js,express,race-condition,Javascript,Node.js,Express,Race Condition,我有一个简单的界面,它接受一些输入值,通过AXIOS post将它们发送到ExpressJS服务器,由该服务器将它们写入文件。同一个文件在另一块C++软件中以随机的时间间隔检查新值。 我的方法是创建与我要读/写的.txt文件关联的.lock文件。 所以C++打开 .Cux< /Cord>文件以获取文件描述符,然后使用该文件描述符锁定文件描述符。如果锁定成功,则继续打开、写入和关闭.txt文件。然后,它解锁并关闭.lock 现在我在ExpressJS方面也做了同样的事情: app.post(&qu

我有一个简单的界面,它接受一些输入值,通过AXIOS post将它们发送到ExpressJS服务器,由该服务器将它们写入文件。同一个文件在另一块C++软件中以随机的时间间隔检查新值。 我的方法是创建与我要读/写的
.txt
文件关联的
.lock
文件。
所以C++打开<代码> .Cux< /Cord>文件以获取文件描述符,然后使用该文件描述符锁定文件描述符。如果锁定成功,则继续打开、写入和关闭
.txt
文件。然后,它解锁并关闭
.lock

现在我在ExpressJS方面也做了同样的事情:

app.post("/dhcpIP", function(req, res) {
  if (req.body.constructor === Object && Object.keys(req.body).length === 0) {
    return res.status(500).send("ERROR: Inputs are empty !");
  }

  let fileText = req.body;
  console.log("fileText: ");
  console.log(fileText);

  const dhcpcd_lock = fs.openSync(dhcpcd_lock_path, "w+");

  flock(dhcpcd_lock, "ex", (err) => {
    if (err) return console.error("Could not lock file.");

    console.log("dhcpcd_lock is locked.");

    const write_to_file = fileText;
    fs.writeFile(
      path.join(configFilesLocation, "/configuration.txt"),
      write_to_file,
      (error) => {
        if (error) return console.error(error);
        console.log("configuration.txt was saved");

        flock(dhcpcd_lock, "un", (error) => {
          if (error) return console.error(error);          

          console.log("File is unlocked.");
          res.sendStatus(200);

          fs.closeSync(dhcpcd_lock);
        });
      }
    );
  });
});
如您所见,我已将代码嵌套在异步函数的回调中:

  • fs.writeFile()
    flock('ex')
    回调中
  • flock('un')
    fs.writeFile()回调函数中
  • res.sendStatus(200)
    fs.closeSync(dhcpcd_锁)
    flock('un')
    回调中
我不知道这是否是正确的做事方式,因为这是我第一次这样做。
我不知道是否可以使用
openSync
closeSync
打开和关闭锁文件,并使其他功能异步(
flock
fs.writeFile
)。
我是否应该使用async
open
,然后将代码嵌套在其回调中,最后使用async
close

如果我必须在同一个
app.post()
handler()中写入两个文件,上述代码会发生什么变化?
我必须全部同步完成吗