2017-05-26 3 views
1

私は単純なノードサーバを設定するコードhereを勉強しています。私はデータチャンクを配列に保存し、最後にそれらを連結するというこのイディオムを何度も見て使用しました。ノードhttpリクエストのデータチャンクのタイプ

http.createServer(function(request, response) { 
    var body = []; 
    request.on('data', function(chunk) { body.push(chunk); }); 
    request.on('end', function() { body = Buffer.concat(body).toString(); 
    ... 
  1. chunkの種類は何ですか?Documentationは、Bufferまたはstringのいずれかですが、どちらがどちらですか?

  2. Buffer.concat(body)を呼び出しても安全ですか?bodyは文字列の配列ですか?Documentation of Buffer.concat(list)には、listがバッファインスタンスのリストである必要があります。文字列 "バッファインスタンス"ですか?

答えて

2

同じドキュメントも述べ:

をデフォルトのエンコーディングは、readable.setEncoding()方法を使用してストリームに指定されている場合、リスナーコールバックは、文字列などのデータのチャンクを通過します。それ以外の場合は、データはBufferとして渡されます。

コードがsetEncodingを呼び出さないため、chunkはバッファになります。

Buffer.concat(body)を呼び出しても安全ですか?bodyは文字列の配列ですか?だから、

> Buffer.concat(['foo', 'bar', 'xxx']) 
TypeError: "list" argument must be an Array of Buffers 

ありません。しかし、bodyはバッファの配列になるので、Buffer.concat(body)はうまく動作するはずです。

関連する問題