将多个文件传送到一个响应
我试图写两个文件和一些更多的文本到一个响应。 下面的代码只会返回第一个文件和“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});