Rutas y Controladores en Express.js
Aprende a estructurar tus aplicaciones Express.js para escalabilidad y mantenibilidad separando rutas y controladores.
/* ¡Aparece una solicitud salvaje! */
Entendiendo las Rutas
En Express.js, una ruta define cómo responde la aplicación a una solicitud de un cliente a un punto final específico, que consiste en una URI (o ruta) y un método de solicitud HTTP específico (GET, POST, etc.). Las rutas son los puntos de entrada del backend de tu aplicación.
Introducción a los Controladores
Un controlador es una función que contiene la lógica de negocio para una ruta específica. En lugar de escribir toda la lógica dentro de la definición de la ruta, la separas en una función de controlador. Esto hace que tu código sea más limpio, más organizado y más fácil de probar y mantener.
Separación de Responsabilidades
El principio de Separación de Responsabilidades (SoC) es clave en el desarrollo de software. Al separar las rutas (que manejan el "qué" - el punto final) de los controladores (que manejan el "cómo" - la lógica), creas una estructura de aplicación modular y escalable. Esta es una piedra angular del patrón MVC (Modelo-Vista-Controlador).
El Rol del Middleware
Las funciones de Middleware son funciones que tienen acceso al objeto de solicitud (req
), al objeto de respuesta (res
) y a la función next
en el ciclo de solicitud-respuesta de la aplicación. Pueden ejecutar código, realizar cambios en los objetos de solicitud y respuesta, finalizar el ciclo de solicitud-respuesta y llamar al siguiente middleware en la pila. A menudo se utilizan para tareas como autenticación, registro y análisis de cuerpos de solicitud.
Practice Zone
Test Interactivo 1: Relacionar Conceptos
Arrastra las descripciones a su concepto correcto de Express.js.
Arrastra en el orden correspondiente.
Arrastra las opciones:
Completa el código:
Test Interactivo 2: Estructura del Código
Rellena los huecos en cada casilla.
// app.js const express = require('express'); const app = express(); const userRoutes = require('./routes/user_routes'); app.use(express.json()); app.use('/api/users', ); const PORT = 3000; app.listen(PORT, () => console.log(`Server on port ${PORT}`)); // routes/user_routes.js const router = express.Router(); const userController = require('../controllers/user_controller'); router.get('/', userController.); router.post('/', userController.); module.exports = router; // controllers/user_controller.js exports.getAllUsers = (req, res) => { res.status(200).json({ message: 'Get all users' }); }; exports. = (req, res) => { res.status(201).json({ message: 'User created' }); };
Ejemplo Práctico: Router de Productos
Crea una aplicación Express simple con un enrutador para productos. Define rutas para obtener y crear productos.
De la Teoría a la Producción
Estructurar tu aplicación Express con rutas y controladores es una buena práctica. Así es como se amortiza en un proyecto real.
1. Escalabilidad y Trabajo en Equipo
Cuando tu proyecto crezca, tendrás docenas de rutas. Separarlas en diferentes archivos (p. ej., `userRoutes.js`, `productRoutes.js`) y tener los controladores correspondientes hace que el código base sea manejable. Diferentes desarrolladores pueden trabajar en diferentes características sin causar conflictos.
2. Avanzado: Capa de Servicio
Para aplicaciones aún más complejas, muchos desarrolladores añaden una "Capa de Servicio". El trabajo del controlador es solo manejar la solicitud y respuesta HTTP. La capa de servicio maneja la lógica de negocio compleja (p. ej., llamar a múltiples modelos de base de datos, integrarse con APIs externas). Esto separa aún más las responsabilidades.
// Controlador
exports.createUser = async (req, res) => {
const user = await UserService.create(req.body);
res.status(201).json(user);
};
Conclusión práctica: Comienza siempre tus proyectos de Express separando rutas y controladores. Te prepara para un código base limpio, escalable y mantenible desde el primer día.
Glosario de Express.js
- Router
- Un objeto que te permite agrupar manejadores de rutas para una parte particular de tu sitio.
- Controlador
- Una función que contiene la lógica de negocio a ejecutar cuando se activa una ruta.
- Middleware
- Funciones que se ejecutan durante el ciclo de vida de una solicitud al servidor. Cada middleware tiene acceso a los objetos de solicitud y respuesta.
- req (Request)
- Un objeto que contiene información sobre la solicitud HTTP que generó el evento.
- res (Response)
- Un objeto que la aplicación Express utiliza para enviar la respuesta HTTP deseada.