【问题标题】:Piping stream to a variable!? or ....?管道流到变量!?要么 ....?
【发布时间】:2015-03-16 10:45:29
【问题描述】:

我有哪些选择可以将流通过管道传输到变量?基于此documentation,可写流的示例包括:

  • http 请求,在客户端
  • http 响应,在服务器 fs 上写入
  • 流 zlib 流
  • 加密流
  • tcp 套接字
  • 子进程标准输入
  • process.stdout, process.stderr

这是否意味着我不能通过管道将流传输到变量来处理它?事实上,我不想将流保存在我的磁盘上,那么管道所有流并使用这些数据的最佳方法是什么?

谢谢,如果您需要更多说明,请告诉我!

【问题讨论】:

  • 您可以通过管道将流传输到变量,但管道通常用于将流传输到可以利用流的其他方法,如果您只想要变量中的数据,则有相应的事件,比如on('data')
  • 谢谢你! on('data') 和 on('readable') 之间有什么区别吗?
  • documentation 中描述了这两个事件,但区别有点神秘,readable 在流可读时触发,而数据显然在有数据时触发。具体有什么区别,我不知道!
  • 您是否介意添加您的答案,我将其标记为答案以供将来参考;它对像我这样的 Node.JS/JavaScript 新手很有用!再次感谢!

标签: javascript node.js express stream


【解决方案1】:

您可能可以通过管道将流传输到变量,但pipe 通常用于将流传输到可以利用流的其他方法,因为pipe 从可读流中提取所有数据,然后写入它到提供的目的地,自动管理流,使目的地不会被快速可读的流淹没。

例如,将流通过管道传输到文件

someReadableStream.pipe(fs.createWriteStream("result.json"));

如果您只想要变量中的数据,那么有一些事件可能更易于使用,例如 on('data')

var readable = getReadableStreamSomehow(),
    result   = '';

readable.on('data', function(chunk) {
      result += chunk;
});

readable.on('end', function () {
    // do something with "result"
});

【讨论】:

  • 我相信事件名称是finish not end
  • @LiorH - 两者都存在,但它们不同,finish 用于可写,end 用于可读,如上例所示,这里是docs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2014-09-30
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
相关资源
最近更新 更多