back/src/middleware/handleValidation.js

58 lines
2.0 KiB
JavaScript

/**
* ========================================
* MIDDLEWARE: handleValidation
* ========================================
*
* Middleware que procesa los resultados de validación de express-validator.
* Se usa DESPUÉS de los validadores para verificar si hubo errores.
*
* FLUJO DE EJECUCIÓN:
* 1. Los validadores (ej: registerValidator) marcan errores
* 2. Este middleware recoge esos errores con validationResult()
* 3. Si hay errores, devuelve 400 con la lista de errores
* 4. Si no hay errores, continúa a la ruta
*
* ORIGEN: Se importa en las rutas que usan validadores
* DESTINO: Si hay errores, termina con 400; si no, continúa a la lógica de la ruta
*
* EJEMPLO DE USO:
* const { registerValidator } = require('../validators/auth.validators');
* router.post('/register', registerValidator, handleValidation, async (req, res) => {
* // Si llega aquí, los datos ya fueron validados
* });
*
* FORMATO DE RESPUESTA CON ERRORES:
* {
* "errors": [
* { "msg": "Email inválido", "param": "email", "location": "body" },
* { "msg": "Password muy corta", "param": "password", "location": "body" }
* ]
* }
*/
const { validationResult } = require('express-validator');
/**
* @param {Request} req - Objeto de petición Express
* @param {Response} res - Objeto de respuesta Express
* @param {Function} next - Función para continuar al siguiente middleware
*/
module.exports = function handleValidation(req, res, next) {
try {
// 1. Extrae los errores de validación acumulados por express-validator
const errors = validationResult(req);
// 2. Si hay errores, devuelve 400 Bad Request con la lista
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// 3. Si no hay errores, continúa a la siguiente función (la ruta)
return next();
} catch (e) {
// 4. Si algo falla, pasa el error al manejador de errores de Express
return next(e);
}
};