Express (Parte IV) — Objeto de solicitud (Request Object) — req.*

Mauricio Garcia
7 min readMay 26, 2022

--

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 la URL(son los que se envían desde la solicitud HTTP GET)
  • req.body[ref]— Un objeto que contiene un objeto (son los que se envían desde la solicitud HTTP POST)
  • req.params[ref]— Segmentos de la URL que se utilizan para capturar los valores especificados en la posición de la URL
  • 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 cliente
  • req.path[ref] — Es la ruta de la solicitud (sin protocolo, host, puerto, cadena de consulta)
  • req.xhr[ref] — Propiedad que devuelve true si la solicitud se originó a partir de una llamada AJAX
  • req.secure[ref] — Propiedad que devuelve true 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 en app.<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 salida 2022704/12 18:30hrs

Con express los obtenemos los datos de la siguiente manera:

Mandar los valores desde postman:

  • En la tab Body, seleccionar x-www-form-urlencoded y abajo ir agregando uno a uno
  • O también en la tab Body, seleccionar raw y en la última opción seleccionar JSON y abajo crear/pegar un JSON 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étodo get, 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 el path = "/", 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ón next() para que vaya al siguiente middleware (paso E)
  • (D) — En caso de que sea erróneo el token, ejecuto la función next, 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/valor token / 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.

--

--