Read last line of a large file with NodeJs

node.js

Solution

The problem with Axel's answer is he assumes the last line of a file will be empty or an EOL. This is not the case.

// fileTools.js
const fs = require('fs');
const readline = require('readline');
const Stream = require('stream');

exports.getLastLine = (fileName, minLength) => {
    let inStream = fs.createReadStream(fileName);
    let outStream = new Stream;
    return new Promise((resolve, reject)=> {
        let rl = readline.createInterface(inStream, outStream);

        let lastLine = '';
        rl.on('line', function (line) {
            if (line.length >= minLength) {
                lastLine = line;
            }
        });

        rl.on('error', reject)

        rl.on('close', function () {
            resolve(lastLine)
        });
    })
}

To use:

const getLastLine = require('./fileTools.js').getLastLine
const fileName = 'C:\\someWinDir\\somelog.log'
const minLineLength = 1
getLastLine(fileName, 1)
    .then((lastLine)=> {
        console.log(lastLine)
    })
    .catch((err)=> {
        console.error(err)
    })

Problem

I'm using this example to read a large file: ``` var fs = require('fs'); var readline = require('readline'); var stream = require('stream'); var instream = fs.createReadStream('your/file'); var outstream = new stream; var rl = readline.createInterface(instream, outstream); rl.on('line', function(line) { // process line here }); rl.on('close', function() { // do something on finish here }); ``` And I want to know when `line` is the last line of file. I read the docs but can not find a solution. I already tried: ``` rl.on('line', function(line) { if (line == '' || line == require("os").EOL) console.log('eof'); }); ``` but it didnt work. Do you have any suggestions. Thanks for reading.

Original source