我正在尝试将两个文件和一些文本写入响应。 但是,下面的代码只返回第一个文件和“那就是全部!”文本。
var http = require('http'),
util = require('util'),
fs = require('fs');
server = http.createServer(function(req, res){
var stream = fs.createReadStream('one.html'),
stream2 = fs.createReadStream('two.html');
stream.on('end', function(){
stream2.pipe(res, { end:false});
});
stream2.on('end', function(){
res.end("Thats all!");
});
res.writeHead(200, {'Content-Type' : 'text/plain'});
stream.pipe(res, { end:false});
}).listen(8001);
答案 0 :(得分:1)
您需要的是双工流,它会将数据从一个流传递到另一个流。
stream.pipe(duplexStream).pipe(stream2).pipe(res);
在上面的示例中,第一个管道会将所有数据从stream
写入duplexStream
,然后会有从duplexStream
到stream2
的数据,最后是{{ 1}}会将您的数据写入stream2
可写流。
这是write方法的一种可能实现的示例。
res
答案 1 :(得分:0)
你可以使用 stream-stream 这是一个非常基本的节点模块(不使用依赖项)
var ss = require('stream-stream');
var fs = require('fs');
var files = ['one.html', 'two.html'];
var stream = ss();
files.forEach(function(f) {
stream.write(fs.createReadStream(f));
});
stream.end();
res.writeHead(200, {'Content-Type' : 'text/plain'});
stream.pipe(res, { end:false});