Saltar al contenido principal

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.