Introducción
Toda API útil necesita recibir datos del cliente — un ID de usuario en la URL, opciones de filtrado en el query string, o un cuerpo JSON con datos de formulario. Antes de poder construir endpoints CRUD, necesitas saber exactamente dónde Express coloca cada pieza de datos entrantes y cómo leerlos de forma fiable.
Esta lección recorre las tres fuentes principales de entrada — parámetros de URL, query strings y cuerpos de solicitud — y luego las pone en juego en un conjunto completo de endpoints CRUD para un recurso simple.
Lectura de entrada: Params, Query Strings y Body
Express analiza los datos de la solicitud entrante en tres objetos distintos dentro del objeto request.
Los parámetros de URL son segmentos con nombre de la ruta. Los declaras con dos puntos en la definición de tu ruta, y Express los pone a tu disposición en req.params.
Los query strings aparecen después del signo de interrogación en una URL, como /users?role=admin&limit=10. Express los analiza automáticamente en req.query.
Los cuerpos de solicitud llevan datos estructurados enviados por el cliente, generalmente en formato JSON. Express no analiza el cuerpo por defecto — necesitas el middleware incorporado express.json() registrado antes de tus rutas.
Una vez que ese middleware está en su lugar, los payloads de POST y PUT están disponibles en req.body.
Construcción de una API CRUD completa
Para mantener el foco en la mecánica del enrutamiento, los ejemplos a continuación usan un array en memoria como almacén de datos. En un proyecto real reemplazarías las operaciones del array con llamadas a la base de datos.
Comienza con los datos y un helper para generar IDs:
Crear — POST /users lee el cuerpo y añade un nuevo registro:
Leer todos — GET /users soporta filtrado opcional por rol a través del query string:
Leer uno — GET /users/:id usa req.params para encontrar un único registro:
Actualizar — PUT /users/:id combina params (qué registro) con el body (nuevos valores):
Eliminar — DELETE /users/:id elimina el registro y devuelve 204 No Content:
Errores comunes
Olvidar express.json() es la fuente de confusión más frecuente para los principiantes. Si req.body es undefined, verifica que el middleware esté registrado y que el cliente esté enviando el encabezado Content-Type: application/json.
No convertir req.params.id a un número antes de compararlo es otro error sutil. Los parámetros de ruta siempre son strings. Comparar el string "1" con el número 1 usando igualdad estricta siempre devolverá false, por lo que tus llamadas a find o findIndex pasarán por alto silenciosamente cada registro.
Devolver datos después de enviar una respuesta provoca un fallo de "headers already sent" en Express. Usa siempre return antes de las llamadas a res dentro de condicionales, como se muestra en los ejemplos anteriores.
Resumen
Express divide los datos de la solicitud entrante en tres objetos: req.params para segmentos de URL, req.query para query strings y req.body para el payload JSON analizado. Registrar el middleware express.json() habilita el análisis del cuerpo. Con esas tres fuentes entendidas, construir endpoints CRUD estándar es cuestión de mapear los métodos HTTP y los códigos de estado a la operación de datos correcta — POST y 201 para creación, GET para lecturas, PUT para actualizaciones, DELETE con 204 para eliminación.
Punto de control de la lección
Repasa lo aprendido y recibe comentarios sobre tu trabajo.