ヘッダーを設定できるライブラリを書いています。 Node.jsが提供する「送信後にヘッダーを設定できません」というメッセージで失敗するのではなく、ヘッダーが既に送信されている場合は、カスタムエラーメッセージを表示したいと思います。では、ヘッダーが既に送信されているかどうかを確認する方法は?
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
ノードはres.headersSent
最近、あなたはそれを使うことができた/使うべきです。これは、ヘッダーが既に送信されているかどうかを示す読み取り専用のブール値です。
if(res.headersSent) { ... }
http://nodejs.org/api/http.html#http_response_headerssent を参照してください
注:これは、Nikoが言及している古いConnectの「headerSent」プロパティと比較して、推奨される方法です。
その他の回答は、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
});