res.end()finalizará el proceso de respuesta. Este método en realidad proviene del núcleo del nodo, específicamente el response.end()método de http.ServerResponse. Se utiliza para finalizar rápidamente la respuesta sin ningún dato. Por ejemplo:
Pero res.end en realidad puede actuar como res.send, en el sentido de que puede pasar un argumento de cadena para agregar como cuerpo de respuesta. Además de eso, res.send también finaliza la respuesta. Entonces, ¿cómo son funcionalmente diferentes?
saltthehash
31
@ psytech140 Jmar77 tuvo una buena respuesta aquí : "Si pasa una cadena a res.send (), automáticamente asume un tipo de contenido de html. res.end (), sin embargo, simplemente llama a la implementación end () subyacente del nodo en el flujo de respuesta, por lo que no se hacen suposiciones para el tipo de contenido ".
abagh0703
Tuve que votar esto puramente porque nunca lo he usado, expresspero por el pensamiento del título: uno envía algo, uno termina algo ... era correcto.
Darren Bartrup-Cook
Pero, ¿y si lo usas res.send()sin nada? ¿Esto actúa como res.end()?
Me gustaría hacer un poco más de énfasis en algunas diferencias clave entre res.end()y res.send()con respecto a los encabezados de respuesta y por qué son importantes.
1. res.send () verificará la estructura de su salida y establecerá la información del encabezado en consecuencia.
¿Por qué es importante esta etiqueta?
El encabezado de respuesta HTTP ETag es un identificador para una versión específica de un recurso. Permite que los cachés sean más eficientes y ahorra ancho de banda, ya que un servidor web no necesita enviar una respuesta completa si el contenido no ha cambiado.
res.end() NO establecerá este atributo de encabezado
Esta será una respuesta aceptada en mi opinión ... se hace más hincapié en las diferencias reales que pueden arruinar su día de trabajo en lugar de la discusión sobre finalizar la respuesta con / sin contenido ...
Tomás
13
lo que res.send () hace es implementar res.write , res.setHeaders y res.end .
comprueba los datos que envía y establece los encabezados correctos,
luego transmite los datos con res.write, y al final usa res.end para establecer el final de la solicitud.
Hay algunos casos en los que querrá hacerlo manualmente, por ejemplo, si desea transmitir un archivo o un gran conjunto de datos, en este caso, querrá configurar los encabezados por su cuenta y usar res.write para mantener la transmisión fluir.
reses un objeto HttpResponse que se extiende desde OutgoingMessage. res.sendllamadas res.endimplementadas por OutgoingMessage para enviar una respuesta HTTP y cerrar la conexión. Vemos código aquí
res.end
usado por nodo simple donderes.send
es usado por framwork expressRespuestas:
res.send()
enviará la respuesta HTTP. Su sintaxis es,El parámetro body puede ser un objeto Buffer, una cadena, un objeto o una matriz. Por ejemplo:
Vea esto para más información.
res.end()
finalizará el proceso de respuesta. Este método en realidad proviene del núcleo del nodo, específicamente elresponse.end()
método dehttp.ServerResponse
. Se utiliza para finalizar rápidamente la respuesta sin ningún dato. Por ejemplo:Lea esto para más información.
fuente
express
pero por el pensamiento del título: uno envía algo, uno termina algo ... era correcto.res.send()
sin nada? ¿Esto actúa comores.end()
?Me gustaría hacer un poco más de énfasis en algunas diferencias clave entre
res.end()
yres.send()
con respecto a los encabezados de respuesta y por qué son importantes.1. res.send () verificará la estructura de su salida y establecerá la información del encabezado en consecuencia.
Donde con res.end () solo puede responder con texto y no establecerá " Content-Type "
2. res.send () establecerá el atributo "ETag" en el encabezado de respuesta
¿Por qué es importante esta etiqueta?
El encabezado de respuesta HTTP ETag es un identificador para una versión específica de un recurso. Permite que los cachés sean más eficientes y ahorra ancho de banda, ya que un servidor web no necesita enviar una respuesta completa si el contenido no ha cambiado.
res.end()
NO establecerá este atributo de encabezadofuente
lo que res.send () hace es implementar res.write , res.setHeaders y res.end .
comprueba los datos que envía y establece los encabezados correctos,
luego transmite los datos con res.write, y al final usa res.end para establecer el final de la solicitud.
Hay algunos casos en los que querrá hacerlo manualmente, por ejemplo, si desea transmitir un archivo o un gran conjunto de datos, en este caso, querrá configurar los encabezados por su cuenta y usar res.write para mantener la transmisión fluir.
fuente
res
es un objeto HttpResponse que se extiende desde OutgoingMessage.res.send
llamadasres.end
implementadas por OutgoingMessage para enviar una respuesta HTTP y cerrar la conexión. Vemos código aquífuente