使用node.js观察文件更改

时间:2012-12-04 07:32:26

标签: node.js

我有以下UseCase:

  

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

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

因此,我的node.js应用程序应该遵守此文件的任何更改。

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

如果文件不可用,是否可以使用数据库对象(NoSQL)

3 个答案:

答案 0 :(得分:54)

好消息是您可以使用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');
    }
});

Read here about the fs.watch(); function

编辑:您可以使用此功能

fs.watchFile(); 

Read here about the fs.watchFile(); function

这将允许您观看文件以进行更改。 IE浏览器。无论何时通过任何其他类型的进程访问它。

答案 1 :(得分:2)

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

const watch = require('node-watch')

watch('README.md', function(event, filename) {
  console.log(filename, ' changed.')
})

答案 2 :(得分:1)

我认为您不需要观察文件更改或使用NoSQL数据库(如果您不想这样做)。我的建议是看eventsObserver pattern)。在线(Google)提供了关于此主题的足够教程。例如Felix关于Using EventEmitters

的文章

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

在MongoDB中,我认为tailable cursors正是您所寻找的。在他们的博客上,他们有一篇帖子解释pub/sub