将HTTP响应stream传递到另一个可读stream

如何使用另一个可读stream的数据填充可读stream?

我的用例有点奇怪,我有一个函数,使用fs.createReadStream从磁盘读取文件,并返回该stream。 现在我想创build一个函数的变种,而不是通过HTTP加载文件,但仍然返回一个读取stream,使客户端可以平等对待这两个函数。

我试图做的最简单的版本是这样的,

 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结果stream,但因为它隐藏在callback中我不能。

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

可以在callback中进行pipe道同时返回stream。

 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,但这不适用于此操作。 您需要使用stream.PassThrough