我有以下UseCase:
A创建聊天并邀请B和C - 在服务器A上创建一个 文件。 A,B和C将消息写入此文件。 A,B和C读了这个 文件。
我想在服务器上创建一个文件并观察这个文件,如果有人在这个文件中写入内容,请用websockets发回新内容。
因此,我的node.js应用程序应该遵守此文件的任何更改。
如何观察文件更改?节点js是否可以不锁定文件?
如果文件不可用,是否可以使用数据库对象(NoSQL)
答案 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数据库(如果您不想这样做)。我的建议是看events(Observer pattern)。在线(Google)提供了关于此主题的足够教程。例如Felix关于Using EventEmitters
的文章这种发布/订阅语义也可以用NoSQL实现。例如,在Redis中,我认为您应该查看pubsub。
在MongoDB中,我认为tailable cursors正是您所寻找的。在他们的博客上,他们有一篇帖子解释pub/sub。