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


2
Pensé res.send()desencadenado res.end(), aunque podría estar equivocado.
tymeJV


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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.