将HTTP响应流传递给另一个可读流

时间:2014-03-07 22:09:48

标签: javascript node.js stream

如何使用来自另一个可读流的数据填充可读流?

我的用例有点奇怪,我有一个函数,使用fs.createReadStream从磁盘读取文件并返回该流。现在我想为通过HTTP加载文件的函数创建一个变体,但仍然返回一个读取流,以便客户端可以平等地处理这两个函数。

我想要做的最简单的版本是这样的,

var makeStream = function(url) { 
  var stream = require('stream');
  var rs = new stream.Readable();
  var request = http.get(url, function(result) {
    // What goes here?
  });
  return rs;
};

我基本上想要的是一种返回HTTP结果流的方法,但因为它隐藏在回调中我不能。

我觉得我错过了一些非常明显的东西,它是什么?

1 个答案:

答案 0 :(得分:4)

可以在回调中执行管道并同时同步返回流。

var makeStream = function(url) { 
  var stream = require('stream')
  var rs = new stream.PassThrough()
  var request = http.get(url, function(res) {
    res.pipe(rs)
  })
  return rs
}

请注意,您尝试使用可读流,但它不适用于此。您需要改为使用stream.PassThrough