Экспресс.js-как проверить, отправлены ли заголовки?

Я пишу библиотеку, которая может установить заголовки. Я хочу дать пользовательское сообщение об ошибке, если заголовки уже отправлены, а не просто позволить ему потерпеть неудачу с сообщением" Не удается установить заголовки после их отправки", заданным узлом.js. Итак, как проверить, отправлены ли заголовки?

3 ответов


EDIT: начиная с express 4.x, вам нужно использовать res.headersSent. Обратите внимание также, что вы можете использовать setTimeout перед проверкой, так как он не установлен в true сразу после вызова res.send(). источник

простой: класс ответа 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


узел поддерживает res.headersSent в эти дни, так что вы можете / должны использовать это. Это логическое значение только для чтения, указывающее, были ли заголовки уже отправлены.

if(res.headersSent) { ... }

см.http://nodejs.org/api/http.html#http_response_headerssent

Примечание: это предпочтительный способ сделать это, по сравнению со старым свойством Connect 'headerSent', которое упоминает Нико.


другие ответы указывают на любой узел.веб-сайты js или github, они связаны.

но я хотел получить подтверждение с сайта Expressjs, вот оно:

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

источник:https://expressjs.com/en/api.html#res.headersSent