javascript - 如何在 node.js 中搜索流中的字符串?

标签 javascript string node.js search stream

如何在流中搜索字符串然后打印出来?我的意思是使用 createReadStream。我想出了如何使用 indexOfreadFile 中查找字符串,但我读到使用流更有效。

更具体地说,我一直在尝试在流中查找字符串,然后打印出包含该字符串的整行。但是以下不断给我错误

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/

相关文章:

javascript - Firebase 安全规则来自特定 Web url 的存储

c - 将指针传递给 char * 时 realloc() 失败。为什么? (因为它是按值计算的,而不是引用!)

javascript - 是否有等效于 VB 的 "LIKE #"的 javascript?

c++ - 在 C++ 中逐字读取 .txt 文件到结构体

node.js - npm "failed to parse json"

javascript - Node js async.series 不适用于 Express 应用程序 --- 响应发生得太快

javascript - SVG 图像未在 web-worker 中加载

javascript - 在 chrome 扩展中使用 fetch 发送 null origin header

javascript - 在 Node.js 中写入 CSV

javascript - 将 li 列表制作成在 javascript 中不起作用的列