- Se utiliza para capturar parámetros definidos en la URL.
- Los valores se obtienen de las partes dinámicas de la ruta (las que tienen
:en el path).
Ejemplo: Ruta configurada en Express:
app.get('/users/:id', (req, res) => {
const userId = req.params.id; // Captura el valor de "id" en la URL
res.send(`El ID del usuario es: ${userId}`);
});Llamada a la ruta:
http://localhost:3000/users/42
Respuesta:
El ID del usuario es: 42
Resumen:
req.paramsobtiene valores comoid(en este caso,42) de la estructura de la URL.- Muy útil para rutas dinámicas.
- Se utiliza para capturar los parámetros enviados en la URL como parte de una consulta.
- Los valores se obtienen después del signo
?en la URL.
Ejemplo: Ruta configurada en Express:
app.get('/search', (req, res) => {
const keyword = req.query.keyword; // Captura el valor de "keyword" en la query string
res.send(`Buscando: ${keyword}`);
});Llamada a la ruta:
http://localhost:3000/search?keyword=nutria
Respuesta:
Buscando: nutria
Resumen:
req.queryobtiene valores comokeyword(en este caso,nutria) de la cadena de consulta.- Muy útil para filtros o búsqueda.
| Aspecto | req.params |
req.query |
|---|---|---|
| Dónde aparece | En la ruta (URL dinámica: /ruta/:param) |
Después del ? en la URL |
| Propósito | Identificar recursos únicos (IDs) | Enviar filtros o datos adicionales |
| Forma de acceso | req.params.nombreParametro |
req.query.nombreParametro |
Supongamos esta ruta:
app.get('/products/:id', (req, res) => {
const productId = req.params.id; // ID dinámico de la URL
const category = req.query.category; // Categoría como query string
res.send(`Producto: ${productId}, Categoría: ${category}`);
});Llamada:
http://localhost:3000/products/123?category=ropa
Respuesta:
Producto: 123, Categoría: ropa
Regla para recordar:
- Si la estructura de la ruta necesita valores únicos, usa
req.params. - Si solo necesitas datos extra (como filtros), usa
req.query. 😊
- Se utiliza para capturar datos enviados en el cuerpo de la solicitud.
- Es comúnmente usado con métodos como
POST,PUToPATCH. - Necesita un middleware como
express.json()oexpress.urlencoded()para leer el cuerpo correctamente.
Ejemplo: Configuración en Express:
const express = require('express');
const app = express();
app.use(express.json()); // Necesario para leer JSON en el cuerpo
app.post('/login', (req, res) => {
const { username, password } = req.body; // Captura datos enviados en el cuerpo
res.send(`Usuario: ${username}, Contraseña: ${password}`);
});Solicitud enviada con el cuerpo:
{
"username": "usuario1",
"password": "12345"
}Respuesta:
Usuario: usuario1, Contraseña: 12345
| Uso | Descripción | Ejemplo |
|---|---|---|
req.query |
Parámetros después de ? en la URL |
/search?keyword=nutria |
req.params |
Parte dinámica de la ruta | /users/:id (/users/42) |
req.body |
Datos enviados en el cuerpo | { "username": "usuario1" } |
-
Contiene los encabezados de la solicitud HTTP.
-
Ejemplo:
app.get('/headers', (req, res) => { res.send(req.headers); // Muestra todos los encabezados enviados });
Llamada con un encabezado personalizado:
curl -H "X-Custom-Header: valor" http://localhost:3000/headersRespuesta:
{ "x-custom-header": "valor", "user-agent": "...", ... }
-
Contiene cookies enviadas por el cliente (requiere el middleware
cookie-parser). -
Ejemplo:
const cookieParser = require('cookie-parser'); app.use(cookieParser()); app.get('/cookies', (req, res) => { res.send(req.cookies); // Devuelve las cookies enviadas });
-
Devuelve la dirección IP del cliente.
-
Ejemplo:
app.get('/ip', (req, res) => { res.send(`Tu IP es: ${req.ip}`); });
-
Devuelve el método HTTP utilizado (GET, POST, PUT, etc.).
-
Ejemplo:
app.use((req, res) => { res.send(`Método utilizado: ${req.method}`); });
-
Devuelve la URL solicitada (sin el dominio).
-
Ejemplo:
app.use((req, res) => { res.send(`URL solicitada: ${req.url}`); });
-
Devuelve el protocolo utilizado (
httpohttps). -
Ejemplo:
app.get('/protocol', (req, res) => { res.send(`Protocolo: ${req.protocol}`); });
| Propiedad | Descripción | Ejemplo de uso |
|---|---|---|
req.query |
Parámetros en la query string | /search?keyword=nutria |
req.params |
Valores dinámicos en la ruta | /users/:id (/users/42) |
req.body |
Datos enviados en el cuerpo de la solicitud | { "username": "usuario1" } |
req.headers |
Encabezados enviados por el cliente | Authorization: Bearer token |
req.cookies |
Cookies enviadas por el cliente (requiere middleware) | { "sessionId": "abc123" } |
req.ip |
Dirección IP del cliente | 192.168.0.1 |
req.method |
Método HTTP de la solicitud | GET, POST, etc. |
req.url |
URL solicitada | /products/123?category=ropa |
req.protocol |
Protocolo utilizado (http o https) |
http |
Aquí tienes un ejemplo práctico donde combinamos varios tipos de req en una aplicación Express. Este ejemplo muestra cómo trabajar con req.query, req.params, req.body, req.headers, y más.
Supongamos que tienes una API para manejar un catálogo de productos. Queremos implementar lo siguiente:
- Buscar productos con filtros opcionales (
req.query). - Obtener detalles de un producto específico (
req.params). - Crear un producto nuevo (
req.body). - Mostrar información adicional del cliente, como su IP y encabezados (
req.ip,req.headers).
const express = require('express');
const app = express();
// Middleware para leer JSON del cuerpo
app.use(express.json());
// 1. Buscar productos (usando req.query)
app.get('/products', (req, res) => {
const { category, minPrice, maxPrice } = req.query;
res.send({
message: 'Buscando productos',
filtros: {
category: category || 'Ninguna categoría',
minPrice: minPrice || 'Sin mínimo',
maxPrice: maxPrice || 'Sin máximo',
},
});
});
// 2. Obtener detalles de un producto (usando req.params)
app.get('/products/:id', (req, res) => {
const { id } = req.params;
res.send({
message: 'Detalles del producto',
productId: id,
});
});
// 3. Crear un producto nuevo (usando req.body)
app.post('/products', (req, res) => {
const { name, price, category } = req.body;
res.send({
message: 'Producto creado exitosamente',
producto: {
name,
price,
category,
},
});
});
// 4. Mostrar información adicional del cliente
app.get('/info', (req, res) => {
res.send({
ip: req.ip,
metodo: req.method,
url: req.url,
headers: req.headers,
});
});
// Iniciar servidor
app.listen(3000, () => {
console.log('Servidor corriendo en http://localhost:3000');
});-
Buscar productos con filtros: URL:
http://localhost:3000/products?category=ropa&minPrice=50&maxPrice=200
Respuesta:{ "message": "Buscando productos", "filtros": { "category": "ropa", "minPrice": "50", "maxPrice": "200" } } -
Obtener detalles de un producto específico: URL:
http://localhost:3000/products/123
Respuesta:{ "message": "Detalles del producto", "productId": "123" } -
Crear un producto nuevo: Solicitud:
POST http://localhost:3000/products Content-Type: application/json { "name": "Camiseta", "price": 100, "category": "ropa" }Respuesta:
{ "message": "Producto creado exitosamente", "producto": { "name": "Camiseta", "price": 100, "category": "ropa" } } -
Información del cliente: URL:
http://localhost:3000/info
Respuesta:{ "ip": "::1", "metodo": "GET", "url": "/info", "headers": { "host": "localhost:3000", "user-agent": "...", "accept": "*/*", ... } }
req.query: Extrae los filtros opcionales (categoría y rango de precio) para buscar productos.req.params: Obtiene eliddel producto directamente desde la URL.req.body: Captura los datos del nuevo producto enviados en el cuerpo de la solicitud.req.ip,req.headers: Proporcionan información del cliente que realiza la solicitud.