node.jsを使用して、res.end()をExpressで呼び出す必要がありますか?


89

いくつかのExpressアプリケーションがあり、一部のモジュールでres.end()は、リクエストハンドラの最後(res.sendまたはの後res.json)で呼び出されますが、他のモジュールでは呼び出されません。

例えば:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

または:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

どちらの場合も機能しますが、多くのリクエストを実行すると、リークやファイル記述子の不足などが心配になります。どちらが「正しい」ですか?


2
私はres.send()引き金を引いたと思ったres.end()-間違っている可能性があります。
tymeJV 2013


@ Trevor-Seniorに感謝します。同じファイルを探していましたが、表示されませんでした...
greuze

@greuze私は前にそれを調べたので、私は前向きなスタートを切った:)。私は先に進み、コメントを他の人のためのより構造化された回答に移動しました。
JayQuerie.com 2013

こんにちは。そして、res.status(<any>)。json(); そして、もう一つ質問があります。その呼び出しを拒否している場合、どのエラーコードを返送すればよいですか?ユーザーが彼の制限を超えているように?
2015年

回答:


120

あなたの質問への答えはノーです。を呼び出すres.end()場合は、呼び出す必要はありませんres.send()。あなたをres.send()呼びres.end()ます。

/lib/response.jsから取得したres.send()関数の最後は次のとおりです。

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

4
たぶん私の記憶がようやく良くなったかもしれません:)
tymeJV


5

res.end([data] [, encoding])

応答プロセスを終了します。このメソッドは実際にはNode core、特にresponse.end() method of http.ServerResponse. データなしで応答を迅速に終了するために使用されます。

データで応答する必要がある場合は、代わりに次のようなメソッドを使用します res.send() and res.json().

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.