[英]How to search stream for string in node.js?
如何搜索流中的字符串然后打印? 我的意思是使用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
換行符,因此res.write
一回去)
您可以使用此模塊搜索流中的字符串而無需緩沖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.