¿Se debe llamar a res.end () en express con node.js?

89

Tengo varias aplicaciones Express , y veo que en algunos módulos, res.end()se llama al final de un controlador de solicitudes (después de res.sendo res.json), mientras que en otros, no se llama.

Por ejemplo:

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

o:

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

Ambos casos funcionan, pero tengo miedo de las fugas o de quedarme sin descriptores de archivos o algo así, cuando ejecuto muchas solicitudes. ¿Cuál es "más correcto"?

greuze
fuente
2
Pensé res.send()desencadenado res.end(), aunque podría estar equivocado.
tymeJV
3
@tymeJV Tienes razón, lo hace: github.com/visionmedia/express/blob/master/lib/response.js#L154 ;)
JayQuerie.com
Gracias @ Trevor-Senior, lo estaba mirando en el mismo archivo y no lo vi ...
greuze
@greuze Lo he buscado antes, así que tenía una ventaja :). Seguí adelante y moví el comentario a una respuesta más estructurada para otros.
JayQuerie.com
Hola. ¿Y qué hay de res.status (<cualquier>) .json (); Y también tengo otra pregunta. ¿Qué código de error debo devolver si rechazo esa llamada? como usuario ha superado su límite?
9me

Respuestas:

121

La respuesta a tu pregunta es no. No tiene que llamar res.end()si llama res.send(). res.send()llama res.end()por ti.

Tomado de /lib/response.js , aquí está el final de la res.send()función:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}
JayQuerie.com
fuente
4
Quizás mis recuerdos finalmente mejoren :)
tymeJV
8

Un ejemplo en el que debe llamar a la función end () es cuando envía el búfer como un archivo para descargar.

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

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

Finaliza el proceso de respuesta. Este método en realidad proviene del núcleo de Node , específicamente el response.end() method of http.ServerResponse. uso para finalizar rápidamente la respuesta sin ningún dato.

Si necesita responder con datos, utilice métodos como res.send() and res.json().

Adiii
fuente