将多个文件传送到一个响应

我试图写两个文件和一些更多的文本到一个响应。 下面的代码只会返回第一个文件和“That's all!” 文本。

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); 

你需要的是一个双工stream,它将数据从一个stream传递到另一个。

 stream.pipe(duplexStream).pipe(stream2).pipe(res); 

在上面的例子中,第一个pipe道将所有数据从stream写入到duplexStream然后将数据从duplexStream写入到stream2 ,最后, stream2将把数据写入res可写入stream。

这是写入方法的一个可能实现的例子。

 DuplexStream.write = function(chunk, encoding, done) { this.push(chunk); } 

你可以使用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});