2016-06-18 3 views
4

私はnodeschoolからワークショップの下でノードを学習しています。ワークショップの名前は learnyounode、質問番号8です。HTTP COLLECT

質問: 最初のコマンドライン引数として に提供されたURLへのHTTP GET要求を実行するプログラムを作成します。サーバからすべてのデータを収集し( では最初の "data"イベントではない)、コンソールに2行書き込む (stdout)。 最初に書き込む行は、サーバーから受信した文字の数が の整数でなければなりません。 2行目には、サーバーによって送信された文字の完全な文字列 が含まれている必要があります。

私が提出した答えは以下の通りです。ノードと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) 
    })) 
}) 


私はこれらの2つのコードの違いを知っていただきたいと思います。 http.get()とパイプがどのように動作するかを説明してください。

+0

ここにも質問を記入してください – YakovL

答えて

3

唯一の違いは、2人がどのように応答を処理したかです。チャンクでレスポンスチャンクを処理し、bodyに相当する文字列を追加しました。彼らはpipeを使用して、読み取り可能なストリームresponseを送信し、書き込み可能なストリームbl(バッファリスト)に送信しました。これは、読み取り可能なストリームが完了するまで待ってから処理を続行します。応答チャンクを処理するために 'データ'のエミッタに加入している間に、blはそれをカバーします。

pipeは、書き込み可能なストリームのパラメータが渡される、読み取り可能なストリームで呼び出される関数です。

編集:あなたの投稿の日付に気がつきました。誰もこれに答えなかったのは奇妙です...

関連する問題