2012-05-05 2 views
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); 

답변

1

데이터 스트림을 다른 스트림으로 전달하는 듀플렉스 스트림이 필요합니다. 제 1 파이프 위의 예에서

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

stream에서 stream2duplexStream에서 작성된 duplexStream 다음이 될 데이터에 대한 모든 데이터를 기록하며 마지막 stream2res 쓰기 스트림에 데이터를 기록한다.

이것은 쓰기 메소드의 가능한 구현 중 하나의 예입니다.

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}); 
관련 문제