Validación
La validación en Express.js es esencial para garantizar que los datos recibidos en las solicitudes HTTP cumplan con las reglas definidas antes de ser procesados o almacenados. Esto ayuda a mantener la integridad de los datos y a prevenir errores o vulnerabilidades de seguridad.
Validación con middleware
Express no incluye un sistema de validación por defecto, pero se pueden usar librerías como express-validator para manejar validaciones de forma estructurada:
npm install express-validator
Ejemplo de uso en rutas:
import { body, validationResult } from 'express-validator';
app.post('/usuarios', [
body('nombre').notEmpty().withMessage('El nombre es obligatorio'),
body('email').isEmail().withMessage('Debe ser un correo válido'),
body('edad').optional().isInt({ min: 18 }).withMessage('La edad debe ser un número mayor o igual a 18')
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errores: errors.array() });
}
res.json({ mensaje: 'Datos válidos' });
});
Validación en controladores o servicios
También es posible centralizar la validación en funciones o servicios específicos para mantener los controladores limpios:
function validarUsuario(data) {
const errores = [];
if (!data.nombre) errores.push('El nombre es obligatorio');
if (data.edad && data.edad < 18) errores.push('La edad debe ser mayor o igual a 18');
return errores;
}
Y usar esta función dentro del controlador:
app.post('/usuarios', (req, res) => {
const errores = validarUsuario(req.body);
if (errores.length) return res.status(422).json({ errores });
res.json({ mensaje: 'Datos válidos' });
});
Buenas prácticas y convenciones
- Validar siempre los datos recibidos, tanto en APIs como en formularios web.
- Usar middleware de validación para mantener los controladores delgados y claros.
- Devolver errores en formato estructurado, preferiblemente JSON, con códigos HTTP adecuados (
422 Unprocessable Entity). - Reutilizar reglas de validación comunes para mantener consistencia entre distintas rutas o controladores.
- Evitar lógica compleja de validación directamente en rutas; delegar a funciones o servicios especializados.