Я пишу библиотеку, которая может устанавливать заголовки. Я хочу дать пользовательское сообщение об ошибке, если заголовки уже были отправлены, вместо того, чтобы просто позволить ему выйти из строя с сообщением «Невозможно установить заголовки после того, как они отправлены», заданным Node.js. Итак, как проверить, были ли уже отправлены заголовки?
Express.js — Как проверить, отправлены ли уже заголовки?
Ответы (3)
РЕДАКТИРОВАТЬ: начиная с Express 4.x, вам необходимо использовать res.headersSent. Также обратите внимание, что вы можете использовать setTimeout перед проверкой, так как он не устанавливается в значение true сразу после вызова res.send(). Источник
Просто: класс Response Connect предоставляет общедоступное свойство «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
headersSent
не headerSent
- person Onur Yıldırım; 17.06.2017
res.headersSent
ответ должен быть принятым решением, так как этот больше не работает.
- person Mark Shust at M.academy; 12.06.2019
В наши дни Node поддерживает res.headersSent
, так что вы можете/должны его использовать. Это логическое значение только для чтения, указывающее, были ли уже отправлены заголовки.
if(res.headersSent) { ... }
См. http://nodejs.org/api/http.html#http_response_headerssent.
Примечание: это предпочтительный способ сделать это по сравнению со старым свойством Connect 'headerSent', которое упоминает Нико.
Другие ответы указывают на сайты Node.js или Github.
Ниже приведен веб-сайт Expressjs: 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
});