2011-07-10 5 views
0
parseResponse = (response, cb) -> 
    output = '' 
    response.setEncoding('utf8') 
    response.on 'data', (chunk) -> output += chunk 
    response.on 'end', -> 
    j = JSON.parse(output) 
    result = j.results[0] 
    cb(result) 

私はこれが何をしているのか、なぜ私が使用しているモジュールで必要なのかを理解しようとしています。渡される応答はhttp getからのものです。この機能は何をしていますか?

おかげ

+0

JavaScript相当品を掲載できますか? – Blender

+0

スクリプト言語はまったくわかりませんが、UTF8でエンコードされたデータのチャンクで応答を読み込み、終了したら結果のJSON文字列で変数cbに渡されるコールバック関数を呼び出します。 – mplungjan

答えて

4

この関数は、HTTPを介して受信された応答(ClientResponseクラスのインスタンス)を処理します。

response.setEncoding('utf-8') 

希望する転送エンコーディング(UTF-8)を示します。 dataイベントに渡されたチャンクはこのエンコーディングで送信されます。

response.on 'data', (chunk) -> output += chunk 

データチャンクを処理するためのコールバックを設定します。受け取った文字列の各「チャンク」は、文字列変数outputに追加されます。

response.on 'end', -> 

完全に転送されたデータに作用する別のコールバックを設定します。

j = JSON.parse(output) 
result = j.results[0] 

受信したデータはJSONとみなされ、そのように解析されます。解析された配列の最初の要素が取得されます。

cb(result) 

コールバック元々関数に提供cbはJSONオブジェクトで見つかったこのデータと呼ばれます。

+0

ありがとうHans!なぜ正確にそれを行う必要がありますか?それが解析される前の応答はどのような形式ですか?一緒にまとめる必要があるチャンクされたデータを受信するだけですか? – fancy

+0

関数の実行時に、HTTP応答が必要です。私はHTTP/TCPについてよく分かりませんが、データが生のバイナリチャンクとして送られてくることを推測しています。また、希望のエンコーディングを設定するとNodeに処理を指示しますUTF-8文字列として指定します。 –

+0

最後のアサーションが正しいです。 string-chunkでデータを受け取り、 'output'変数に各部分を蓄積します。それは少し余分な処理を行い、パラメータとして与えられたコールバックにデータを渡します。 –

関連する問題