Express (Parte V) — Objeto de respuesta (Response Object) — res.*
Temario
- Objeto de respuesta (Response Object) — res.*
- Envío de respuesta HTTP (res.send)
- Envío de respuesta JSON (res.json)
- Envío de respuesta download (res.download)
i. Objeto de respuesta (Response Object)
Es un parámetro que recibe la función de devolución de llamada o función de middleware comúnmente llamado res o response
. Inicia como una instancia de http.ServerResponse
[ref] y representa la respuesta HTTP
que envía una aplicación express
cuando recibe una solicitud HTTP.
Las propiedades y métodos más comunes son:
res.status
[ref] — Establecer el código de estadoHTTP
, el valor predeterminado es200
(OK), podemos utilizar otros como404
(No encontrado),500
(Error del servidor),204
(Sin datos)res.cookie
[ref] — Establece o borra las cookies que se almacenarán en el cliente.res.redirect
[ref] — Re-dirigir una solicitud, donde el código por default es302
res.set
[ref] — Establecer un encabezado de respuesta,express
tiene como valor predeterminadotext/html
, si deseamos cambiarlo a un texto sin formato, debemos llamar este método y poner'res.set('Content-type', 'text/plain')
res.send
[ref]— Envía una respuesta al cliente, si el retorno es un arreglo o un objeto se recomienda utilizar el métodores.json
res.json
[ref] — Envía de respuesta al cliente unJSON
res.jsonp
[ref] — Envía una respuestaJSON
con soporteJSONP
.res.download
[ref] — Va a convertir elpath
en un archivo descargable, dando la oportunidad de especificar el nombre del archivo a descargar.res.render
[ref] — Va a renderizar una vista, usando el motor de plantillas configurado, teniendo un código default200
Para ver todas las propiedades que tiene [ref].
Expliquemos un poco más a fondo res.send, res.json, res.download
ii. Envío de respuesta HTTP (res.send)
Envía la respuesta HTTP
, donde puede ser: Buffer, string, Array
o un objeto JSON
— Ejemplo (JSON)
Haciendo la petición desde Postman:
Haciendo la petición desde el navegador:
Nota: He instalado la extensión
JSON viewer
para chrome [ref], para ver los datosJSON
de manera más amigable
Haciendo la petición con fetch
:
— Ejemplo 2 (text)
Haciendo la petición desde Postman:
Haciendo la petición desde el navegador:
Haciendo la petición con fetch
:
iii. Envío de respuesta JSON (res.json)
La respuesta puede ser cualquier valor JSON
, incluido: objeto, arreglo, cadena de texto, número o booleano.
— Ejemplo
Haciendo la petición desde Postman:
Haciendo la petición desde el navegador:
Haciendo la petición con fetch
:
iv. Envío de respuesta download (res.download)
Convierte el archivo path
a un “archivo adjunto”, donde los navegadores solicitarán al usuario la descarga; por default el nombre del archivo es el encabezado de filename
del header
, utiliza res.sendFile
[ref] para transferir el archivo. Cuando se completa la transferencia o se produce un error, el método llama al callback (opcional).
Donde:
- (A) — Descargar un archivo con el nombre default
- (B) — Descargar un archivo con un nombre diferente
- (C)— Descargar un archivo con un nombre diferente y detectar cuando la descarga fue exitosa o tuvo un error.
— Ejemplo 1
Vamos a ocupar el ejemplo donde tenemos las imágenes:
Nota: Recuerda agregar algún archivo para descargar dentro del proyecto (en este caso se está usando una de las imágenes del ejemplo anterior)
Haciendo la petición desde el navegador:
— Ejemplo 2
Podemos aprovechar el segundo parámetro, para ponerle un nombre personalizado al archivo:
Haciendo la petición desde el navegador:
— Ejemplo 3
Vamos a utilizar la función de retorno, para saber si descargó la imagen o ha generado un error:
- En caso de que SÍ encuentre la imagen, se descarga e imprime en consola del servidor
Success: Download
, quizás una idea de implementación es : Cuándo al usuario se le limita las descargas. - En caso de que NO encuentre la imagen o tenga un error, retorna el status
500
, con el mensajeSorry!
e imprime en consola del servidorError: Download
, aquí nos puede servir para saber el por qué no se ha podido descargar la imagen.
En la siguiente entrega vamos a ver Express (Parte VI) — Motor de plantillas con pug y EJS
La entrega pasada vimos Express (Parte IV) — Objeto de solicitud (Request Object) — req.*
Bibliografía y links que te puede interesar…
Iconos e imágenes…