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"?


2
Ich dachte res.send()ausgelöst res.end()- könnte aber falsch sein.
TymeJV


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;
}

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();

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().

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.