web-dev-qa-db-ja.com

Express.js-ヘッダーが既に送信されているかどうかを確認する方法

ヘッダーを設定できるライブラリを書いています。 Node.jsが提供する「送信後にヘッダーを設定できません」というメッセージで失敗するのではなく、ヘッダーが既に送信されている場合は、カスタムエラーメッセージを表示したいと思います。では、ヘッダーが既に送信されているかどうかを確認する方法は?

65
powerboy

EDIT:Express 4.x以降では、res.headersSentを使用する必要があります。また、res.send()の呼び出し直後にtrueに設定されないため、チェックする前にsetTimeoutを使用することもできます。 ソース

シンプル:ConnectのResponseクラスは、パブリックプロパティ「headerSent」を提供します。

res.headerSentは、ヘッダーが既にクライアントに送信されているかどうかを示すブール値です。

ソースコードから:

/**
   * Provide a public "header sent" flag
   * until node does.
   *
   * @return {Boolean}
   * @api public
   */

  res.__defineGetter__('headerSent', function(){
    return this._header;
  });

https://github.com/senchalabs/connect/blob/master/lib/patch.js#L22

45
Niko

ノードはres.headersSent最近、あなたはそれを使うことができた/使うべきです。これは、ヘッダーが既に送信されているかどうかを示す読み取り専用のブール値です。

if(res.headersSent) { ... }

http://nodejs.org/api/http.html#http_response_headerssent を参照してください

注:これは、Nikoが言及している古いConnectの「headerSent」プロパティと比較して、推奨される方法です。

146
Willem Mulder

その他の回答は、Node.jsまたはGithub Webサイトを指します。

以下は、Expressjs Webサイトからのものです。 https://expressjs.com/en/api.html#res.headersSent

app.get('/', function (req, res) {
  console.log(res.headersSent); // false
  res.send('OK');
  console.log(res.headersSent); // true
});