wake-up-neo.com

Express.js - Wie überprüfe ich, ob Header bereits gesendet wurden?

Ich schreibe eine Bibliothek, die Header setzen kann. Ich möchte eine benutzerdefinierte Fehlermeldung ausgeben, wenn Header bereits gesendet wurden, anstatt sie nur mit der von Node.js übermittelten Meldung "Header können nach dem Senden nicht gesetzt werden" fehlschlagen zu lassen. So überprüfen Sie, ob Header bereits gesendet haben?

65
powerboy

BEARBEITEN: Ab Express 4.x müssen Sie res.headersSent verwenden. Beachten Sie auch, dass Sie setTimeout verwenden möchten, bevor Sie es überprüfen, da es nicht unmittelbar nach einem Aufruf von res.send () auf true gesetzt wird. Quelle

Einfach: Die Response-Klasse von Connect stellt eine öffentliche Eigenschaft "headerSent" bereit.

res.headerSent ist ein boolescher Wert, der angibt, ob die Header bereits an den Client gesendet wurden.

Aus dem Quellcode:

/**
   * 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

45
Niko

Knoten unterstützt das res.headersSent heutzutage, also könntest/solltest du das benutzen. Es ist ein schreibgeschützter Boolescher Wert, der angibt, ob die Header bereits gesendet wurden.

if(res.headersSent) { ... }

Siehe http://nodejs.org/api/http.html#http_response_headerssent

Hinweis: Dies ist die bevorzugte Methode im Vergleich zu der älteren Connect-Eigenschaft 'headerSent', die Niko erwähnt.

146
Willem Mulder

Andere Antworten verweisen auf Websites von Node.js oder Github.

Unten ist von Expressjs Website: 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
});