使用node.js观察文件更改

我有以下UseCase:

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

我想要一个在服务器上创build一个文件,并观察这个文件,如果有人写入这个文件的东西回发送新的websockets。

所以,这个文件的任何改变都应该被我的node.js应用程序观察到。

我如何观察文件更改? 这是可能的节点js没有locking文件?

如果不能使用文件,数据库对象(NoSQL)

好消息是你可以用Node的API观察文件的变化。

阅读Node.js API文档是非常有用的,当弄清楚这些事情。 这是一个非常宝贵的来源。 🙂

但是,这不会让您访问已写入文件的内容。 你也许可以使用fs.appendFile(); 函数,以便在将某个事件写入文件时,将事件发送到“正在logging”正在写入的新数据的其他事件。

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'); } }); 

在这里阅读关于fs.watch(); function

编辑 :您可以使用该function

 fs.watchFile(); 

在这里阅读关于fs.watchFile(); function

这将允许您观看文件的更改。 IE浏览器。 每当它被任何types的其他进程访问时。

我不认为你需要观察文件的更改或使用NoSQL数据库(如果你不想)。 我的build议是看事件 ( 观察者模式 )。 在线(Google)有足够多关于此主题的教程。 例如Felix关于使用EventEmitters的文章

这种发布/订阅语义也可以用NoSQL来实现。 例如,在Redis中,我想你应该看看pubsub 。

在MongoDB中,我认为可用的游标是你正在寻找的。 在他们的博客上有一个解释pub / sub的post。

你也可以使用节点监视 。 这是一个简单的例子:

 var watch = require('node-watch'); watch('README.md', function(filename) { console.log(filename, ' changed.'); });