如何使用来自另一个可读流的数据填充可读流?
我的用例有点奇怪,我有一个函数,使用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结果流的方法,但因为它隐藏在回调中我不能。
我觉得我错过了一些非常明显的东西,它是什么?
答案 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
。