Node.js readline (日志文件逐行读取)

在我们使用Node.js的过程中可能会遇到需要一行一行读取数据列入log日志文件或者某些txt文件,那在这里我们就可以使用Node.js提供的readline。

原文链接

如果我们要逐行读取首先会用到createInterface,参数为一个对象。对象中我们一般会包含input和output或者一些函数。接下来这个列子我们只使用input并且将读取的内容逐行打印,使用line事件。当打印完后调用close事件。

const readline = require('readline');
const fs = require('fs');


const rl = readline.createInterface({
    input: fs.createReadStream('../logs/newApp.log')
});
rl.on('line', (line) => {
    console.log(line)
});
        
rl.on('close', ()=> {
    console.log('closed')
});

运行结果

[2019-05-13T21:06:11.155] [INFO] newApp - start to get data from CBT tool
[2019-05-13T21:06:11.183] [INFO] newApp - last date is -------------2019-05-12
[2019-05-13T21:06:11.183] [INFO] newApp - start running job
closed

但是如果说我们需要将逐行获取到的数据全部统计起来并返回的话。我们需要用到fs.stat来获取文件。并将读取到的内容装进数组。因为是异步的所以我们使用async,接下来将数组返回给前台。

const readline = require('readline');
const fs = require('fs');

const viewChangeName =  async (req, res) => {
    try {
        const arr = await readLog('logs/updateAppName.log')
        res.send(arr)
    } catch (e) {
        res.send(e)
    }
}


const readLog = filepath => {
    return new Promise((resolve, reject) => {
        const arr = [];
        var stats = fs.stat(filepath, function(err,stats){
            if (stats && stats.isFile() ) {
                const rl = readline.createInterface({
                    input: fs.createReadStream(filepath)
                });
                rl.on('line', (line) => {
                    arr.unshift(line)
                });
            
                rl.on('close', ()=> {
                    resolve(arr)
                });
            } else {
                resolve(['The record is empty'])
            }
        });
    })
    
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 7:00 手机设置的闹铃“呲啦啦”的响着,很痛苦的睁开眼睛,这时我要深深佩服那些六点就起床准备早餐的妈妈们。想着还...
    菡墨娘阅读 83评论 0 0
  • 想不通自己去年为什么要拒绝吴总的offer. 有点后悔. 可是一年时间过去了,没法重来,也没时间重来。 而且还有多...
    想做个逃兵阅读 254评论 0 0
  • 这一次我要感情用事。小弟弟献丑了。 千千万万遍 时间是二十世纪七十年代, 地点在阿富汗。 我的仆人哈桑, 他的忠诚...
    九五乾谦阅读 522评论 4 17
  • 我承认有些标题党。其实我想表达的是:夕阳有其醉人的余晖,朝阳有其初升的活力,正午的艳阳则如烈火般绚烂热情。人生亦如...
    留小馆阅读 842评论 0 0