File size: 989 Bytes
0dc7194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * 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' },
  });
};