Controllers
En Express, los controladores son funciones o módulos que contienen la lógica de negocio para procesar las solicitudes HTTP y generar las respuestas correspondientes. Separar la lógica en controladores ayuda a mantener el código organizado y facilita el mantenimiento y la escalabilidad de la aplicación.
Creación de un controlador
Un controlador puede ser una función simple:
exports.listar = (req, res) => {
res.json({ usuarios: ['Juan', 'María', 'Pedro'] });
};
exports.crear = (req, res) => {
const { nombre } = req.body;
res.status(201).json({ mensaje: `Usuario ${nombre} creado correctamente` });
};
Este fichero se puede colocar en controllers/usuarioController.js.
Vinculación de controladores a rutas
En el archivo de rutas o en app.js, se vinculan los métodos del controlador a las rutas correspondientes:
import express from 'express';
const router = express.Router();
import usuarioController from './controllers/usuarioController';
router.get('/usuarios', usuarioController.listar);
router.post('/usuarios', usuarioController.crear);
module.exports = router;
En el archivo principal app.js se importa y usa el router:
import express from 'express';
const app = express();
import usuarioRoutes from './routes/usuarioRoutes';
app.use(express.json());
app.use('/', usuarioRoutes);
app.listen(3000, () => console.log('Servidor corriendo en http://localhost:3000'));
Buenas prácticas y convenciones
- Mantener los controladores delgados, delegando la lógica compleja a servicios o módulos independientes.
- Agrupar funciones relacionadas por recurso o entidad (por ejemplo,
UsuarioController,ProductoController). - Nombrar los métodos de manera clara indicando la acción que realizan (
listar,crear,actualizar,eliminar). - Siempre enviar respuestas consistentes y, en APIs, preferiblemente en formato JSON.
- Evitar acceder directamente a la base de datos desde las funciones de controlador; usar modelos o servicios para mantener separación de responsabilidades.