Express: Routing
Aprende routing en Express para gestionar rutas HTTP, parámetros, middleware y modularizar aplicaciones web con ejemplos prácticos.
Aprende Express GRATIS y certifícateRouting en Express
El routing constituye el núcleo fundamental de cualquier aplicación web construida con Express. Se encarga de determinar cómo responde la aplicación a las solicitudes del cliente hacia endpoints específicos, definidos por una URL y un método HTTP particular.
En Express, una ruta se compone de tres elementos esenciales: el método HTTP (GET, POST, PUT, DELETE, etc.), la ruta o path, y una función de callback que se ejecuta cuando la ruta coincide con la solicitud entrante.
Definición básica de rutas
Express proporciona métodos que corresponden directamente con los verbos HTTP más utilizados. La sintaxis básica sigue el patrón app.METHOD(PATH, HANDLER)
, donde METHOD es el método HTTP en minúsculas.
const express = require('express');
const app = express();
// Ruta GET básica
app.get('/', (req, res) => {
res.send('¡Bienvenido a la página principal!');
});
// Ruta POST para crear recursos
app.post('/usuarios', (req, res) => {
res.json({ mensaje: 'Usuario creado correctamente' });
});
// Ruta PUT para actualizar recursos
app.put('/usuarios/:id', (req, res) => {
const userId = req.params.id;
res.json({ mensaje: `Usuario ${userId} actualizado` });
});
Parámetros de ruta
Los parámetros de ruta permiten capturar valores dinámicos de la URL. Se definen utilizando dos puntos (:
) seguidos del nombre del parámetro, y están disponibles en el objeto req.params
.
// Parámetro simple
app.get('/productos/:id', (req, res) => {
const productId = req.params.id;
res.json({ producto: `Producto con ID: ${productId}` });
});
// Múltiples parámetros
app.get('/categorias/:categoria/productos/:id', (req, res) => {
const { categoria, id } = req.params;
res.json({
categoria: categoria,
producto: id
});
});
Los parámetros también pueden incluir patrones opcionales utilizando el signo de interrogación:
// Parámetro opcional
app.get('/archivos/:nombre.:extension?', (req, res) => {
const { nombre, extension } = req.params;
res.json({
archivo: nombre,
tipo: extension || 'sin extensión'
});
});
Patrones de ruta avanzados
Express utiliza internamente la librería path-to-regexp para el matching de rutas, lo que permite patrones más sofisticados mediante expresiones regulares y wildcards.
// Wildcard para cualquier carácter
app.get('/buscar/*', (req, res) => {
const termino = req.params[0];
res.json({ busqueda: termino });
});
// Patrones con expresiones regulares
app.get(/.*volar$/, (req, res) => {
res.send('Rutas que terminan en "volar"');
});
// Parámetros con restricciones
app.get('/numeros/:id(\\d+)', (req, res) => {
res.json({ numero: req.params.id });
});
Query parameters y manejo de datos
Los query parameters se acceden a través de req.query
y proporcionan una forma de pasar información adicional en la URL:
// URL: /productos?categoria=electronica&precio=100
app.get('/productos', (req, res) => {
const { categoria, precio } = req.query;
res.json({
filtros: {
categoria: categoria || 'todas',
precioMaximo: precio || 'sin límite'
}
});
});
Para el manejo del body en peticiones POST y PUT, Express requiere middleware adicional:
// Middleware para parsing JSON
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.post('/contacto', (req, res) => {
const { nombre, email, mensaje } = req.body;
res.json({
respuesta: `Gracias ${nombre}, hemos recibido tu mensaje`
});
});
Express Router
Para aplicaciones más complejas, Express Router permite modularizar las rutas en archivos separados, mejorando la organización y mantenibilidad del código.
// routes/usuarios.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.json({ usuarios: [] });
});
router.get('/:id', (req, res) => {
res.json({ usuario: req.params.id });
});
router.post('/', (req, res) => {
res.json({ mensaje: 'Usuario creado' });
});
module.exports = router;
// app.js principal
const usuariosRouter = require('./routes/usuarios');
app.use('/api/usuarios', usuariosRouter);
Middleware de ruta
El middleware de ruta permite ejecutar código antes de que se procese la respuesta final. Es especialmente útil para validaciones, autenticación y logging:
// Middleware específico para una ruta
app.get('/admin/*', verificarAutenticacion, (req, res) => {
res.send('Área de administración');
});
function verificarAutenticacion(req, res, next) {
const token = req.headers.authorization;
if (token) {
next(); // Continúa al siguiente middleware
} else {
res.status(401).json({ error: 'No autorizado' });
}
}
También es posible encadenar múltiples middlewares para una misma ruta:
app.get('/datos',
validarParametros,
registrarAcceso,
(req, res) => {
res.json({ datos: 'información procesada' });
}
);
El sistema de routing de Express proporciona la flexibilidad necesaria para construir APIs REST robustas y aplicaciones web escalables, permitiendo un control granular sobre cómo se manejan las diferentes solicitudes HTTP en tu aplicación.
Lecciones de este módulo de Express
Lecciones de programación del módulo Routing del curso de Express.
Ejercicios de programación en este módulo de Express
Evalúa tus conocimientos en Routing con ejercicios de programación Routing de tipo Test, Puzzle, Código y Proyecto con VSCode.