1

この関数を使用して、Node.js アプリケーションでリクエストの入力データを取得します。

function getData(callback){
  req.data = '';
  req.receivedDataSize = 0;
  req.maxDataSize = 5000;
  req.dataCorrupted = false;

  req.on('data', function(chunk){
    if(req.dataCorrupted === false && chunk.length < req.maxDataSize && req.receivedDataSize < req.maxDataSize){
      req.data += chunk;
      req.receivedDataChunk += chunk.length;
    } else {
       // throw 413 error.

       req.dataCorrupted = true;
       return;
  });

  req.on('end', function(){
    if(req.dataCorrupted === false){
      callback(null);
    } else {
      callback('input-data-corrupted');
    }

    return;
  });
}

次の「req.on('data') || req.on('end')」で何が起こるか、「return」をスローすると、各イベントコールバックでこれらの「return」ステートメントがどのように使用されるかを知りたい? イベントリスナーを停止してそのイベントのリッスンを停止する方法はありますか、または単に「req.end();」を呼び出しています 適切な停止方法は?

4

1 に答える 1

1

あなたの例returnでは何もしませんが、関数を終了して値を返します。ストリームがコールバックするのを止めません。コード例からこれらのステートメントを完全に削除しても、同じように機能します。

req.end()ストリームの場合、呼び出しはそれを終了する必要があります。つまり、それreq.on('data')以上トリガーされません。

ストリームに関するあまり役に立たないAPIドキュメントは次のとおりです。

http://nodejs.org/api/stream.html#stream_stream_end

これはノード内のストリームのガイドでもあります: http://maxogden.com/node-streams

于 2012-08-20T22:09:24.547 に答える