每隔固定时间在节点js中收集文件中的更改

时间:2019-03-12 16:06:47

标签: node.js setinterval chokidar

我有一个外部程序,该程序不时地将数据流式传输到csv文件中(但退出很多)。 我想每10秒收集一次所有更改的数据,并对其进行一些处理。 表示我只想处理以前未处理过的行。

这是基本代码:

function myFunction() {

  var loop = setInterval(
    () =>
      {
          var instream = fs.createReadStream("rawData.csv"); //should somehow include only new data since last cycle
          var outstream = fs.createWriteStream("afterProcessing.csv");
          someProcessing(instream, outstream);
          outstream.on('finish', () => {
               sendBackResults("afterProcessing.csv");
                });
        //will exit the loop when 'run' flag will change to false
          if(!run) ? clearInterval(loop) : console.log(`\nStill Running...\n`) ;
      } , 10000 );    

 }

现在,我尝试使用chokidar和fs.watch,但在这种情况下我不知道如何使用它们。

1 个答案:

答案 0 :(得分:0)

fs.createReadStream可以使用start参数

  

选项可以包含开始和结束值,以从中读取一定范围的字节   文件而不是整个文件。开始和结束都包括在内   然后从0开始计数

因此,您需要保存最近读取的位置,并在start上使用它。

您可以使用:instream.bytesRead

let bytesRead = 0;

instream.on('end', () => {
  bytesRead = instream.bytesRead;
});