如何在流中搜索字符串然后打印出来?我的意思是使用 createReadStream
。我想出了如何使用 indexOf
在 readFile
中查找字符串,但我读到使用流更有效。
更具体地说,我一直在尝试在流中查找字符串,然后打印出包含该字符串的整行。但是以下不断给我错误
fs.createReadStream(process.argv[2], function (err, data) {
data.indexOf ...
目前,我的程序打印出整个流,而不仅仅是包含字符串的行。
var http = require('http');
var fs = require('fs');
var server = http.createServer( function(req, res) {
console.log("Request received.");
res.writeHead(200, {"Content-Type": "text/plain"});
res.write("Hello World\n\n\n");
var s = fs.createReadStream(process.argv[2]).pipe(res);
s.on('end', function(){ res.end() })
});
server.listen(8000);
最佳答案
流是缓冲的,因此传递给 data
事件(您通常会收听)的缓冲区不会以任何方式分成单独的行或分隔在单独的行上。
您可以使用 readline
执行逐行搜索的模块:
var fs = require('fs');
var readline = require('readline');
var server = http.createServer( function(req, res) {
console.log("Request received.");
res.writeHead(200, {"Content-Type": "text/plain"});
res.write("Hello World\n\n\n");
readline.createInterface({
input : fs.createReadStream(process.argv[2]),
terminal : false
}).on('line', function(line) {
var idx = line.indexOf(THE_SUBSTRING);
if (idx !== -1) {
res.write(line + '\n');
}
}).on('close', function() {
res.end();
});
});
(编辑: readline 去除换行符,所以 res.write
加一个回来)
关于javascript - 如何在 node.js 中搜索流中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20187145/