Czy res.end () musi być wywoływana ekspresowo z node.js?

89

Mam kilka aplikacji Express i widzę, że w niektórych modułach res.end()jest wywoływana na końcu modułu obsługi żądań (po res.sendlub res.json), podczas gdy w innych nie jest wywoływana.

Na przykład:

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

lub:

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

Oba przypadki działają, ale boję się wycieków lub wyczerpania deskryptorów plików lub czegoś w tym rodzaju, gdy uruchamiam wiele żądań. Który z nich jest „bardziej poprawny”?

Greuze
źródło
2
Myślałem, że res.send()wywołane res.end()- może być źle.
tymeJV
3
@tymeJV Masz rację, tak: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com,
Dziękuję @ Trevor-Senior, szukałem tego samego pliku i nie widziałem ...
greuze
@greuze Sprawdziłem to już wcześniej, więc miałem przewagę :). Poszedłem dalej i przeniosłem komentarz do bardziej uporządkowanej odpowiedzi dla innych.
JayQuerie.com
Cześć. A co z res.status (<any>) .json (); Mam też inne pytanie. jaki kod błędu mam odesłać, jeśli odrzucam to połączenie? jak użytkownik przekroczył swój limit?
9me

Odpowiedzi:

121

Odpowiedź na twoje pytanie brzmi: nie. Nie musisz dzwonić, res.end()jeśli dzwonisz res.send(). res.send()woła res.end()do ciebie.

Zaczerpnięte z /lib/response.js , oto koniec res.send()funkcji:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}
JayQuerie.com
źródło
4
Może moje wspomnienia wreszcie się poprawiły :)
tymeJV
8

jednym z przykładów, w którym musisz wywołać funkcję end (), jest wysłanie bufora jako pliku do pobrania.

res.write(buffer);
res.end();
Konstantin Adamov
źródło
5

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

Kończy proces odpowiedzi. Ta metoda w rzeczywistości pochodzi z rdzenia węzła , a konkretnie z response.end() method of http.ServerResponse. użycia do szybkiego zakończenia odpowiedzi bez żadnych danych.

Jeśli chcesz odpowiedzieć danymi, zamiast tego użyj metod takich jak res.send() and res.json().

Adiii
źródło