通过管道将多个文件传送到一个响应

Pipe multiple files to one response

本文关键字:响应 一个 文件传送 管道      更新时间:2023-09-26

我正在尝试为响应写入两个文件和更多文本。但是,下面的代码只返回第一个文件和"这就是全部!"文本。

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.pipe(duplexStream).pipe(stream2).pipe(res);

在上面的示例中,第一个管道会将所有数据从stream写入duplexStream然后有数据从duplexStream写入stream2,最后stream2会将您的数据写入res可写流。

这是 write 方法的一种可能实现的示例。

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

你可以使用流流 这是一个非常基本的节点模块(不使用依赖)

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