Подтвердить что ты не робот

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

Я пишу библиотеку, которая может устанавливать заголовки. Я хочу предоставить пользовательское сообщение об ошибке, если заголовки уже отправлены, вместо того, чтобы просто дать ему сбой с сообщением "Can not set headers after they are sent", данное Node.js. Итак, как проверить, отправлены ли заголовки?

4b9b3361

Ответ 1

РЕДАКТИРОВАТЬ: с Express 4.x, вам нужно использовать res.headersSent. Также обратите внимание, что вы можете захотеть использовать setTimeout перед проверкой, поскольку он не установлен в true сразу после вызова res.send(). Источник

Просто: класс 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

Ответ 2

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

if(res.headersSent) { ... }

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

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

Ответ 3

Другие ответы указывают на сайты 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
});