监视新内容的文件并在NodeJS中检索该内容

时间:2017-01-27 05:19:23

标签: javascript node.js

我正在使用Node.js监视文件监视文件以进行内容更改。当文件内容被修改时,它会成功调用该事件

fs.watchFile(filePath, ()=> {
    console.log('File Changed ...');
    file = fs.readFileSync(filePath);
    console.log('File content at : ' + new Date() + ' is \n' + file);
});

Hello Hello World

我只想要 World 并不是文件的所有内容,任何人都可以建议最有效的方法来实现这个或任何节点包来实现这一点。我查看了节点包Chokidar,但它也监视了这一变化。

我找到了一个JAVA解决方案,但不确定任何Node.js替代方案。

How to watch file for new content and retrieve that content

我做了我的研究试图关注这些帖子

https://nodejs.org/api/fs.html#fs_fs_watchfile_filename_options_listener

http://www.codingdefined.com/2015/09/how-to-monitor-file-for-modifications.html

Observe file changes with node.js

由于

1 个答案:

答案 0 :(得分:0)

最好的方法是创建一个流,该流读取文件并保持打开状态以进行文件更改。我找到了描述并解决此问题的工具:

  

tailing-stream 是一个Node.js模块,提供了可以   从正在被主动写入的文件中连续读取。这个   与标准fs.createReadStream相反。方法,其中   返回一个ReadableStream,一旦到达最后一个就停止读取   最初打开流时存在的字节。它   支持与Node ReadableStream完全相同的接口,并且它的   createReadStream方法的功能与fs.createReadStream相同。

https://github.com/jasontbradshaw/tailing-stream

您可以使用npm安装它:

npm install tailing-stream

这是一个简单的例子:

const fs = require('fs');
const TailingReadableStream = require('tailing-stream');

const stream = TailingReadableStream.createReadStream("file", {timeout: 0});

stream.on('data', buffer => {
  console.log(buffer.toString());
});
stream.on('close', () => {
  console.log("close");
});