2012-05-05 23 views
2

我正在嘗試將兩個文件和一些更多文本寫入響應。 但是下面的代碼只會返回第一個文件和「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); 

回答

1

你需要的是一個雙工流,它將數據從一個流傳遞到另一個流。

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

在第一管上面的例子會寫從streamduplexStreamduplexStream寫入stream2話,會有數據的所有數據,並最終將stream2您的數據寫入到res寫流。

這是寫入方法的一種可能實現的示例。

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

可以使用流流這(使用不依賴)一個非常基本的節點模塊

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}); 
相關問題