使用node.js观察文件更改

Sam*_*Sam 37 node.js

我有以下UseCase:

A创建一个聊天并邀请B和C - 在服务器A上创建一个文件.A,B和C将消息写入此文件.A,B和C读取此文件.

我想在服务器上创建一个文件并观察这个文件,如果有人在这个文件中写入内容,则用websockets发回新内容.

因此,我的node.js应用程序应该观察到此文件的任何更改.

如何观察文件更改?节点js是否可以不锁定文件?

如果文件不可能,那么数据库对象(NoSQL)是否可行

Hen*_*son 56

好消息是您可以使用Node的API观察文件更改.

在解决这些问题时,阅读Node.js API文档非常有用.这是一个非常宝贵的来源.:)

但是,这不允许您访问已写入文件的内容.您可以使用该fs.appendFile();函数,以便在将某些内容写入文件时,将事件发送到"记录"正在写入的新数据的其他内容.

fs.watch(): 直接从文档粘贴

fs.watch('somedir', function (event, filename) {
    console.log('event is: ' + event);
    if (filename) {
        console.log('filename provided: ' + filename);
    } else {
        console.log('filename not provided');
    }
});
Run Code Online (Sandbox Code Playgroud)

在这里阅读fs.watch(); 功能

编辑:您可以使用该功能

fs.watchFile(); 
Run Code Online (Sandbox Code Playgroud)

在这里阅读fs.watchFile(); 功能

这将允许您观看文件以进行更改.IE浏览器.每当其他任何进程访问它时.

  • 我建议不要使用fs.watchFile()因为它在不同的操作系统上有问题等.请尝试https://github.com/paulmillr/chokidar. (6认同)

Jon*_*ern 5

你也可以使用node-watch。这是一个简单的例子:

const watch = require('node-watch')

watch('README.md', function(event, filename) {
  console.log(filename, ' changed.')
})
Run Code Online (Sandbox Code Playgroud)

  • 您已从您的*自己的* 存储库中链接了 5 行代码的异地链接。请将这些行编辑到问题而不是链接中。 (3认同)
  • 感谢您的建议!我开始回答问题,这对我提高自己有很大帮助:) (2认同)