2013-10-25 6 views
13

Node.js에 기본 http.get()을 사용하여 HTTP 응답을 dataend 이벤트를 바인딩 할 수있는 스트림으로 파이프 처리하려고합니다.Node.js HTTP 응답 스트림

내가 현재 사용하고, GZIP 데이터를이 처리 해요 :

http.get(url, function(res) { 
    if (res.headers['content-encoding'] == 'gzip') { 
    res.pipe(gunzip); 
    gunzip.on('data', dataCallback); 
    gunzip.on('end', endCallback); 
    } 
}); 

풀어서는 스트림이 바로 작동합니다. 나는 스트림 (스트림을 작성하고 스트림을 읽음)을 작성하고 응답을 파이프하려고 시도했지만 많은 운이 없었습니다. gzip으로 압축되지 않은 콘텐츠의 경우이 동일한 거래를 복제 할 제안이 있습니까?

+0

내가 응답 본체를 얻으려고하고 있는데, 일단 완료되면. 나는'res.on ('data')'를 할 수 있다고 생각했으나 결코 그럴 수 없다. – dzm

답변

20

HTTP 요청의 응답 개체는 읽을 수있는 스트림의 인스턴스입니다. 따라서 data 이벤트가있는 데이터를 수집 한 다음 end 이벤트가 발생하면이 데이터를 사용합니다. 이 예에서 body 위의 쓰기 가능한 스트림 인 경우

var http = require('http'); 
var body = ''; 

http.get(url, function(res) { 
    res.on('data', function(chunk) { 
    body += chunk; 
    }); 
    res.on('end', function() { 
    // all data has been downloaded 
    }); 
}); 

readable.pipe(dest)는 같은 일을 기본적 것이다.

+1

Doh, 잘 리디렉션을 따르지 않는 HTTP 때문인 것으로 나타났습니다. 귀하의 코드는 내가 가지고 있으며 리디렉션을 제외하고는 잘 작동합니다. 나는 npm'follow-redirects'를 체크 아웃하고 그것을 테스트 할 것이다. – dzm

+0

또한 리디렉션을 따르는 인기있는'request' 모듈을 시도해 볼 수 있습니다. – vkurchatkin

+0

@vkurchatkin'request'가 gzipped 내용을 지원합니까? – dzm