Muss res.end () in express mit node.js aufgerufen werden?

88

Ich habe mehrere Express- Anwendungen und sehe, dass sie in einigen Modulen res.end()am Ende eines Anforderungshandlers (nach res.sendoder res.json) aufgerufen werden, während sie in anderen Modulen nicht aufgerufen werden.

Beispielsweise:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

oder:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

Beide Fälle funktionieren, aber ich habe Angst vor Lecks oder fehlenden Dateideskriptoren oder Ähnlichem, wenn ich viele Anfragen ausführe. Welches ist "korrekter"?

greuze
quelle
2
Ich dachte res.send()ausgelöst res.end()- könnte aber falsch sein.
TymeJV
3
@tymeJV Sie haben Recht, es tut: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com
Vielen Dank an Trevor-Senior, ich habe genau diese Datei gesucht und sie nicht gesehen ...
greuze
@greuze Ich habe es schon einmal nachgeschlagen, also hatte ich einen Vorsprung :). Ich ging voran und verschob den Kommentar in eine strukturiertere Antwort für andere.
JayQuerie.com
Hallo. Und was ist mit res.status (<any>) .json (); Und ich habe noch eine andere Frage. Welchen Fehlercode soll ich zurücksenden, wenn ich diesen Anruf ablehne? Wie Benutzer ist sein Limit überschritten?
9me

Antworten:

120

Die Antwort auf Ihre Frage lautet nein. Sie müssen nicht anrufen, res.end()wenn Sie anrufen res.send(). res.send()ruft res.end()nach dir.

Aus /lib/response.js entnommen , ist hier das Ende der res.send()Funktion:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}
JayQuerie.com
quelle
4
Vielleicht werden meine Erinnerungen endlich besser :)
tymeJV
8

Ein Beispiel, bei dem Sie die Funktion end () aufrufen müssen, ist das Senden eines Puffers als Datei zum Herunterladen.

res.write(buffer);
res.end();
Konstantin Adamov
quelle
5

res.end([data] [, encoding])

Beendet den Antwortprozess. Diese Methode stammt tatsächlich aus dem Knotenkern , insbesondere aus der response.end() method of http.ServerResponse. Verwendung zum schnellen Beenden der Antwort ohne Daten.

Wenn Sie mit Daten antworten müssen, verwenden Sie stattdessen Methoden wie res.send() and res.json().

Adiii
quelle