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

greuze
la source
2
Je pensais res.send()déclenché res.end()- pourrait être faux tho.
tymeJV
3
@tymeJV Vous avez raison, c'est le cas: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com
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;
}
JayQuerie.com
la source
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();
Konstantin Adamov
la source
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().

Adiii
la source