node.js - 多个进程上的 fs.createWriteStream

标签 node.js fs

如何实现一个系统,其中多个 Node.js 进程使用 fs.createWriteStream 写入同一文件,这样它们就不会覆盖数据?看起来 fs.createWriteStream 的默认设置是在调用该方法时清除文件。我的目标是清除一次文件,然后让所有其他后续写入者仅追加数据。

我应该先使用fs.createWriteStream,然后使用fs.appendFile吗?或者有没有办法为每个进程打开一个流,而不仅仅是第一个打开文件的进程?

最佳答案

Should I use fs.createWriteStream and then fs.appendFile?

您可以使用其中任何一个。

使用 fs.createWriteStream 您必须像这样更改标志:

fs.createWriteStream('your_file',{
  flags: 'a+', // default is 'w' (just 'a' might be enough here, i'm not sure)
})

如果该文件不存在,则应创建该文件;如果存在,则应使用写访问权限打开该文件,并将指针设置为 end。 (追加模式)

如何使用fs.appendFile应该很清楚,而且它的作用几乎相同。

现在是多个进程访问同一文件的问题。显然,只有一个进程可以同时以写访问权限打开同一文件。 因此,如果另一个进程具有写访问权限,则需要等待文件被释放。您可能需要一个库来实现这一点。

例如:https://www.npmjs.com/package/lockup
或者这个:https://github.com/Perennials/mutex-node
您还可以在这里找到更多信息:https://www.npmjs.com/browse/keyword/lock
或这里:https://www.npmjs.com/browse/keyword/mutex

我还没有尝试过这些库中的任何一个,但我发布的库和列表中的其他几个库应该完全满足您的需要。

关于node.js - 多个进程上的 fs.createWriteStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658995/

相关文章:

node.js - 使用静态地址访问远程计算机上的sqlite数据库(Electron/Nodejs/fs)

node.js - 在不使用 express.js 保存文件的情况下使用文件内容?

node.js - windows只读属性中的nodejs fs模式操作

javascript - express-session 不会设置 cookie connect.sid

node.js - Express JS/Node JS : Browsers are not setting cookie when secure=true, sameSite: 'none'

javascript - 如何从匿名函数中传递值

node.js - Async.times 是否并行运行?

javascript - wait不是等待从文件中读取数据吗?

node.js - 使用 node.js 将目录中的所有文件移动到父级

javascript - Meteor 服务器方法运行时间