使用Node.js,将文件从文件系统流式传输到Node.js的最佳方法是什么,但是从底部到顶部向后读取它?我有一个大文件,如果我只想要最后10行,从顶部读取似乎没有多大意义.这可能吗?
现在我有这个可怕的代码,我们用浏览器执行GET请求来查看服务器日志,并传递一个查询字符串参数来告诉服务器我们想要读取的日志文件末尾有多少行:
function get(req, res, next) {
var numOfLinesToRespondWith = req.query.num_lines || 10;
var fileStream = fs.createReadStream(stderr_path, {encoding: 'utf8'});
var jsonData = []; //where jsonData gets populated
var ret = [];
fileStream.on('data', function processLineOfFileData(chunk) {
jsonData.push(String(chunk));
})
.on('end', function handleEndOfFileData(err) {
if (err) {
log.error(colors.bgRed(err));
res.status(500).send({"error reading from smartconnect_stdout_log": err.toString()});
}
else {
for(var i = 0; i < numOfLinesToRespondWith; i++){
ret.push(jsonData.pop());
}
res.status(200).send({"smartconnect_stdout_log": ret});
}
});
}
Run Code Online (Sandbox Code Playgroud)
上面的代码读取整个文件,然后在读取整个文件后将请求的行数添加到响应中.这很糟糕,有没有更好的方法呢?任何建议都会很乐意得到满足.
(上面代码的一个问题是它写出了日志的最后几行,但是行的顺序是相反的......)
一种可行的方法是:
process.exec('tail -r ' + file_path).pipe(process.stdout);
Run Code Online (Sandbox Code Playgroud)
但是这个语法是不正确的 - 所以我的问题就是 - …