2

我正在尝试编写两个文件和更多文本来响应。然而,下面的代码只返回第一个文件和“仅此而已!” 文本。

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

2 回答 2

1

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

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

在上面的示例中,第一个管道将写入所有数据,然后将数据从streamto写入,最后将数据写入可写流。duplexStreamduplexStreamstream2stream2res

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

DuplexStream.write = function(chunk, encoding, done) {
   this.push(chunk);
}
于 2014-03-31T05:27:38.720 回答
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});
于 2017-05-30T18:30:35.437 回答