Res.end () doit-il être appelé en express avec node.js?


89

J'ai plusieurs applications Express , et je vois que dans certains modules, elle res.end()est appelée à la fin d'un gestionnaire de requêtes (après res.sendou res.json), alors que dans d'autres, elle n'est pas appelée.

Par exemple:

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

ou:

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

Les deux cas fonctionnent, mais j'ai peur des fuites ou de l'épuisement des descripteurs de fichiers ou quelque chose du genre, lorsque j'exécute de nombreuses requêtes. Lequel est "le plus correct"?


2
Je pensais res.send()déclenché res.end()- pourrait être faux tho.
tymeJV


Merci @ Trevor-Senior, je le cherchais dans le même fichier et je ne l'ai pas vu ...
greuze

@greuze Je l'ai déjà recherché, donc j'avais une longueur d'avance :). Je suis allé de l'avant et ai déplacé le commentaire dans une réponse plus structurée pour les autres.
JayQuerie.com

Salut. Et que dire de res.status (<any>) .json (); Et j'ai aussi une autre question. quel code d'erreur dois-je renvoyer si je refuse cet appel? comme l'utilisateur a dépassé sa limite?
9me

Réponses:


120

La réponse à votre question est non. Vous n'êtes pas obligé d'appeler res.end()si vous appelez res.send(). res.send()vous appelle res.end().

Tiré de /lib/response.js , voici la fin de la res.send()fonction:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

4
Peut-être que mes souvenirs s'améliorent enfin :)
tymeJV

8

un exemple où vous devez appeler la fonction end () est lorsque vous envoyez un tampon en tant que fichier à télécharger.

res.write(buffer);
res.end();

5

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

Termine le processus de réponse. Cette méthode provient en fait du noyau Node , en particulier de l' response.end() method of http.ServerResponse. utilisation pour terminer rapidement la réponse sans aucune donnée.

Si vous devez répondre avec des données, utilisez plutôt des méthodes telles que res.send() and res.json().

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.