如何searchnode.js中的stringstream?

如何在一个stream中searchstring,然后打印它? 通过这个我的意思是使用createReadStream 。 我想出了如何使用indexOfreadFile查找string,但是我正在阅读使用stream更有效。

更具体地说,我一直在试图在stream中find一个string,然后打印出包含该string的整行。 但是,以下不断给我错误

 fs.createReadStream(process.argv[2], function (err, data) { data.indexOf ... 

目前,我的程序打印出整个stream,而不仅仅是包含string的行。

 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); 

stream被缓冲,所以传递给data事件的缓冲区(你通常会听)不会被分割或分隔在不同的行上。

您可以使用readline模块执行逐行search:

 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一个回来)

你可以使用这个模块在一个stream中searchstring而不用缓冲