1. ホーム
  2. javascript

[解決済み] Express.js - ヘッダーが既に送信されているかどうかを確認するには?

2023-06-15 07:03:24

質問

ヘッダを設定するライブラリを書いています。Node.jsが出す "Can't set headers after they are sent" というメッセージで失敗させるのではなく、ヘッダーが既に送信されている場合に独自のエラーメッセージを出したいのです。では、ヘッダーがすでに送信されているかどうかを確認するにはどうすればよいのでしょうか?

どのように解決するのですか?

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