javascript - 将多个文件传输到一个响应

标签 javascript node.js stream pipe

我正在尝试将两个文件和更多文本写入响应。 然而,下面的代码只返回第一个文件和“Thats 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.pipe(duplexStream).pipe(stream2).pipe(res);

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

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

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

关于javascript - 将多个文件传输到一个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10462649/

相关文章:

javascript - 在 Web Worker 中将 SVG 转换为 PNG

javascript - getBBox() 和 getCompulatedTextLength() 一次有效,一次无效

javascript - 谷歌图表垂直轴和工具提示值格式

ssl - 带有 SSL 的 node.js、socket.io

c# - 取消 WriteAsync 操作时为 "Cannot close stream until all bytes are written"

javascript - 如何截获 node.js 中命令的输出流并将其保存到变量?

javascript - 如何选择表格中的所有输入字段

node.js - Node 错误,nodeenv : couldn't find any version specified for use

mysql - 序列化具有相同外键的多条记录的连接表

android - Flutter:如何暂停和重新启动 `Stream` 监听器?