Express (Parte IV) — Objeto de solicitud (Request Object) — req.*
Temario
- Objeto de solicitud (Request Object) — req.*
- Parámetros de cadena (req.query)
- Parámetros de cuerpo (req.body)
- Parámetros de ruta (req.params)
- Parámetros de encabezado (req.headers)
i. Objeto de solicitud (Request Object)
Es un parámetro que recibe la función de devolución de llamada o función de middleware comúnmente llamado req o request
. Inicia como una instancia de http.IncomingMessage
[ref] y posteriormente Express
le agrega funcionalidad adicional.
Las propiedades y métodos más comunes son:
req.query
[ref]— Un objeto que contiene parámetros de cadena enviados desde laURL
(son los que se envían desde la solicitudHTTP GET
)req.body
[ref]— Un objeto que contiene un objeto (son los que se envían desde la solicitudHTTP POST
)req.params
[ref]— Segmentos de laURL
que se utilizan para capturar los valores especificados en la posición de laURL
req.headers
— Los encabezados de solicitud recibidos del cliente.req.cookies
[ref]— Objeto que contiene los valores de cookies pasados desde el cliente.req.ip
[ref]— La dirección IP del clientereq.path
[ref] — Es la ruta de la solicitud (sin protocolo, host, puerto, cadena de consulta)req.xhr
[ref] — Propiedad que devuelvetrue
si la solicitud se originó a partir de una llamada AJAXreq.secure
[ref] — Propiedad que devuelvetrue
si la conexión es segura (https)req.originalUrl
[ref] — Es la ruta de la solicitud (sin protocolo, host, puerto)
Para ver todas las propiedades que tiene [ref].
Expliquemos un poco más a fondo req.query, req.body, req.params, req.headers
— Para los ejemplos
Recuerda: Para todos los ejemplos, su plantilla base es la siguiente:
No olvides instalar express
en cada ejemplo:
ii. Parámetros de cadena (req.query)
Los parámetros de cadena, es una colección de pares ( clave=valor
), donde comienza con un signo de interrogación (?
), y los pares están separados por signos de unión (&
). La clave
como el valor
deben estar codificados[ref] en la URL
.
— Sintaxis
— Ejemplo
Debes crear un nuevo proyecto llamado example-req
, con el archivo app.js
y su código base.
Imagina que tenemos una agencia de viajes, y necesitamos saber todos los vuelos que hay del aeropuerto de origen al aeropuerto destino. La petición acepta dos parámetros from
y to
:
En express
los obtenemos los parámetros de la siguiente manera:
Mandar los valores desde postman
Desde JavaScript haremos la petición con fetch
[ref] de la siguiente manera:
Nota: Para probar el código de arriba de una manera sencilla, abre una ventana del navegador, abre la consola, copia, pega y da enter para ver el resultado.
Cuando se hace la petición, en la consola donde levantamos el servidor podemos observar la respuesta que se ha creado.
iii. Parámetros de cuerpo (req.body)
Es un objeto que contiene datos pares (clave/valor) y que son enviados desde el cuerpo de la solicitud, aceptando el método HTTP [GET, POST, DELETE]
, de forma predeterminada devuelve undefined
, por lo que es necesario usar un middleware de análisis express.json()
[ref] y express.urlencoded()
[ref] basados en body-parser
[ref] de cuerpo para poder leer los datos.
Donde:
- (A) — Para analizar el formato
application/json
, solo será necesario ponerlo una sola vez, al principio de la aplicación. - (B) — Para analizar el formato
application/x-www-form-urlencoded
, solo será necesario ponerlo una sola vez, al principio de la aplicación. - (C) — Puede utilizar
post, delete, put
enapp.<verb>
- (D) — Obtener el objeto
— Ejemplo
Siguiendo con el ejemplo de vuelos, imagina que debemos agregar: un vuelo de origen y destino, así como la hora de salida. Entonces, tenemos los siguientes datos:
- Origen: Ciudad de México (
MEX
), destino: Lima, Perú (LIM
), fecha de salida2022704/12 18:30hrs
Con express
los obtenemos los datos de la siguiente manera:
Mandar los valores desde postman:
- En la tab
Body
, seleccionarx-www-form-urlencoded
y abajo ir agregando uno a uno
- O también en la tab
Body
, seleccionarraw
y en la última opción seleccionarJSON
y abajo crear/pegar unJSON
válido
Mandar los valores desde JavaScript con fetch
[ref]:
Donde:
- (A) — Mandamos el método
POST
- (B) — Le indicamos que los datos están en formato
application/json
- (C) — Para que puedan viajar los datos, se convierten en una cadena
Nota: Para probar el código de arriba, abre una ventana del navegador, abre la consola, copia, pega y da enter para ver el resultado.
Nota2: No te olvides reiniciar/refrescar el servidor.
iv. Parámetros de ruta (req.params)
Los parámetros de ruta son aquellos segmentos de la URL
que se utilizan para capturar valores especificados en la posición de la URL
. Los valores capturados son visibles en el objeto req.params
, como clave: valor
.
— Sintaxis
Los parámetros, son marcadores de posición en la URL
, donde deben comenzar SIEMPRE con dos puntos (:
), su convención es similar a otros marcos web como Rails.
— Ejemplo:
Podemos usar: /user/1245
, /user/abc1234
, etc…
El guión guión ( -
) y el punto ( .
) se interpretan literalmente, por lo que se pueden mandar junto con los parámetros.
Podemos usar: /flights/MEX-MTY
, /user/MEX-LIM
, etc…
De esta forma podemos crear rutas más amigables.
v. Parámetros de encabezado (req.headers)
Es un objeto que contiene datos pares (clave/valor) y que son enviados desde los encabezados de la solicitud, donde transmiten información acerca del navegador del cliente, origen (página quien solicita), referencia, etc. y es independiente de la solicitud HTTP
La mayoría de las veces es ocupada para mandar parámetros especiales como un token
.
Donde:
- (A) —
METHOD
puede ser cualquier métodoget, post, put, delete, use
. Y"path"
es el enrutamiento. - (B) — Obtener el objeto.
— Ejemplo
Necesitamos saber todos los detalles de vuelos de la Ciudad de México (MEX
) a Lima, Perú (LIM
), y además en los headers necesitamos mandar nuestro token
de autenticación, para que el servicio me devuelva los datos, entonces esperamos lo siguiente:
En express
los obtenemos de la siguiente manera:
Donde:
- (A) — He decidido usar el método
use
con elpath = "/"
, con la idea de que TODAS las peticiones pasen por ese middleware y desde un solo lado validar el token. - (B) — Hago una validación bastante sencilla, donde verifico que el token sea el correcto (recuerda: solo es un ejemplo)
- (C) — En caso de que venga correcto el
token
, ejecuto la funciónnext()
para que vaya al siguiente middleware (paso E) - (D) — En caso de que sea erróneo el
token
, ejecuto la funciónnext
, pero con un mensaje de error, con esto irá directamente al middleware de error (paso F) - (E) — Middleware que está va a entrar en caso de que el
token
sea correcto - (F) — Middleware que está va a entrar en caso de que el
token
sea incorrecto
Mandar los valores desde postman:
- En la tab de
Headers
agregar clave/valortoken / c2e32b8002d9d2f497141f555f5720f0
Si no mandamos el token, nos va a retornar un error 500:
Mandar los valores desde JavaScript con fetch
[ref]:
Donde:
- (A) — Mandamos el método, en este caso
POST
- (B) — Le indicamos que los datos están en formato
application/json
- (C)— Le mandamos el token
- (D) — Para que puedan viajar los datos, se convierten en una cadena
Nota: Para probar el código de arriba, abre una ventana del navegador, abre la consola, copia, pega y da enter para ver el resultado.
Podemos validar si se esta mandando el valor, en la misma consola nos vamos a la tab Network
, después a la de Headers
,abrimos la opción Request Headers
y buscamos la propiedad token
:
Podemos observar que sí ha enviado la propiedad con su respectivo valor.
En la siguiente entrega vamos a ver Express (Parte V) — Objeto de respuesta (Response Object) — rest.*
La entrega pasada vimos Express (Parte III) — Método app.use (sintaxis, errores, carga de archivos estáticos)
Bibliografía y links que te puede interesar…
Iconos e imágenes…