| /** | |
| * Middleware centralizado de manejo de errores. | |
| * | |
| * Responsabilidades: | |
| * - Capturar errores lanzados por controladores, servicios o middlewares. | |
| * - Si es HttpError conocido: responder con el status y codigo definido. | |
| * - Si es error inesperado: loguear el stack y responder 500 generico | |
| * ("Internal server error") para no filtrar detalles internos en produccion. | |
| * | |
| * Montado al final de app.js como ultimo middleware. | |
| */ | |
| import { HttpError } from '../utils/apiResponse.js'; | |
| import { logger } from '../utils/logger.js'; | |
| export const errorHandler = (err, req, res, _next) => { | |
| if (err instanceof HttpError) { | |
| return res.status(err.status).json({ | |
| ok: false, | |
| error: { code: err.code, message: err.message, details: err.details }, | |
| }); | |
| } | |
| logger.error({ err, path: req.path, method: req.method }, 'unhandled error'); | |
| return res.status(500).json({ | |
| ok: false, | |
| error: { code: 'INTERNAL', message: 'Internal server error' }, | |
| }); | |
| }; | |