2016-06-18 3 views
4

nodeschool의 워크샵에서 노드를 학습 중입니다. 공방의 명칭은 learnyounode, 질문 번호 8입니다. HTTP COLLECT.

질문 : 첫 번째 명령 줄 인수로 에 제공된 URL로 HTTP GET 요청을 수행하는 프로그램을 작성하십시오. 서버에서 모든 데이터를 수집하고 ( 은 첫 번째 "데이터"이벤트가 아님) 콘솔에 두 줄을 입력하십시오. (stdout). 첫 번째 줄은 서버에서받은 문자 수인 을 나타내는 정수 여야합니다. 두 번째 줄에는 서버에서 보낸 완전한 문자열을 포함해야합니다.

내가 제출 한 답변은 다음과 같습니다. 노드 및 http.get의 파이프 기능

var http = require('http'); 
var url = process.argv[2]; 
http.get(url,function(res){ 
    var body = ''; 
    res.on('error',function(err){ 
     console.error(err); 
    }) 
    res.on('data',function(chunk){ 
     body+=chunk.toString(); 
    }); 
    res.on('end',function(){ 
     console.log(body.length); 
     console.log(body); 
    }); 
}); 

가 제공하는 대답은 동안

,

var http = require('http') 
var bl = require('bl') 
http.get(process.argv[2], function (response) { 
    response.pipe(bl(function (err, data) { 
    if (err) 
     return console.error(err) 
    data = data.toString() 
    console.log(data.length) 
    console.log(data) 
    })) 
}) 


나는이 두 코드의 차이를 알고 싶습니다. 그리고 http.get() 및 파이프가 작동하는 방식을 설명하십시오.

+0

여기에 질문을 올리십시오. – YakovL

답변

3

유일한 차이점은 두 사람이 응답을 처리 한 방법입니다. 청크로 응답 청크를 처리하고 body에 해당하는 문자열을 추가했습니다. 그들은 pipe을 사용하여 읽을 수있는 스트림 response을 보내고 계속 진행하기 전에 읽을 수있는 스트림이 완료 될 때까지 대기 할 수있는 쓰기 가능한 스트림 bl (버퍼 목록)으로 보냈습니다. 응답 덩어리를 처리하기 위해 '데이터'의 에미 터를 구독하는 동안 bl이 처리합니다.

pipe은 쓰기 가능한 스트림의 매개 변수를 전달할 수있는 읽을 수있는 스트림에서 호출되는 함수입니다.

편집 : 방금 게시물의 날짜를 발견했습니다. 이 질문에 답을 한 사람은 이상하지 않습니다 ...

관련 문제