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


74

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


2
Powerboy, könnten Sie die andere Antwort akzeptieren, weil die aktuell akzeptierte Antwort nicht mehr funktioniert? Siehe @ fiatjafs Kommentar.
Willem Mulder

Antworten:


56

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

Einfach: Die Antwortklasse von Connect bietet eine öffentliche Eigenschaft "headerSent".

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


1
Beachten Sie, dass dies nicht mit nodejs.org/docs/latest/api/http.html#http_response_headerssent identisch ist. In Express scheint es, dass die gesendeten Header zurückgegeben werden.
Lee Olayvar

Jeden Tag bewundere ich, wie einfach das Konzept von nodej ist.
BG BRUNO

6
@powerboy Node unterstützt derzeit res.headersSent nativ, daher ist es wahrscheinlich eine gute Idee, diese Eigenschaft zu verwenden.
Willem Mulder

11
Ab dem 17. Mai 2014 wurde res.headerSent von senchalabs / connect zugunsten von res.headersSent abgelehnt.
Kunal Kapadia

7
es ist headersSentnichtheaderSent
Onur Yıldırım

174

Node unterstützt res.headersSentdiese Tage, also könnten / sollten Sie das nutzen. 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.


5
Dies sollte zur akzeptierten Antwort gemacht werden, da die aktuell akzeptierte Antwort nicht mehr funktioniert.
Mantagen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.