errorHandler
Overview
services/api/src/middlewares/errorHandler.js define una función de middleware para manejo de errores HTTP. Su trabajo es normalizar la respuesta de error y devolver siempre un JSON consistente.
La función toma un objeto de error, calcula un código de estado, construye un mensaje y responde al cliente. Cuando el error es de servidor, también lo registra en consola.
[!NOTE] El archivo exporta una sola función:
errorHandler.
How it works
flowchart TB
E[err] --> S[statusCode from err statusCode or 500]
E --> M[message from err message or Error interno del servidor]
S --> D{statusCode 500 or greater}
D -->|yes| L[console error]
D -->|no| R[res status json]
L --> R
M --> R
La función recibe err, _req, res y _next. Luego calcula statusCode y message con valores por defecto. Si el código es 500 o superior, imprime el error completo. Después responde con res.status(statusCode).json(...).
{
"title": "errorHandler",
"content": "Funci\u00f3n p\u00fablica de middleware en services/api/src/middlewares/errorHandler.js. Convierte errores en respuestas JSON y registra errores de servidor.",
"type": "function",
"filePath": "services/api/src/middlewares/errorHandler.js",
"badges": [
"public"
]
}
Data & fields
[
{
"name": "err",
"type": "object",
"required": true,
"description": "Objeto de error de entrada. La función lee statusCode, message, code, field y details."
},
{
"name": "_req",
"type": "object",
"description": "Solicitud HTTP recibida. Se recibe, pero no se usa en esta implementación."
},
{
"name": "res",
"type": "object",
"required": true,
"description": "Respuesta HTTP. La función usa status y json para enviar el error al cliente."
},
{
"name": "_next",
"type": "function",
"description": "Siguiente middleware. Se recibe, pero no se usa en esta implementación."
},
{
"name": "statusCode",
"type": "number",
"description": "Valor leído desde err.statusCode. Si no existe, usa 500."
},
{
"name": "message",
"type": "string",
"description": "Mensaje leído desde err.message. Si no existe, usa 'Error interno del servidor'."
},
{
"name": "code",
"type": "string | null",
"description": "Campo incluido en la respuesta JSON. Usa err.code o null."
},
{
"name": "field",
"type": "string | null",
"description": "Campo incluido en la respuesta JSON. Usa err.field o null."
},
{
"name": "details",
"type": "any | null",
"description": "Campo incluido en la respuesta JSON. Usa err.details o null."
}
]
La función responde con un objeto que contiene estos campos:
error: mensaje de error.code: código de error onull.field: nombre del campo onull.details: detalles adicionales onull.
{
"error": "Mensaje de error",
"code": null,
"field": null,
"details": null
}
Behaviors
errorHandler— calcula elstatusCodeconerr.statusCodeo500.errorHandler— calcula elmessageconerr.messageo el texto por defecto.errorHandler— registra el error conconsole.error(err)cuando el código es500o mayor.errorHandler— responde con JSON usandores.status(statusCode).json(...).errorHandler— exponecode,fieldydetailsen la respuesta si existen.
Workflows
sequenceDiagram
participant A as Application
participant H as errorHandler
participant C as Console
participant R as Response
A->>H: err req res next
H->>H: calcula statusCode y message
alt statusCode 500 or greater
H->>C: console error
end
H->>R: status json
El flujo es directo y determinista. Primero normaliza el error. Luego decide si debe registrarlo. Finalmente responde al cliente con JSON.
Gotchas & edge cases
[!WARNING] Si
err.statusCodeno existe, la función usa500. Eso activa el registro conconsole.error(err).
[!NOTE]
detailsusa el operador??. Sierr.detailsesundefinedonull, la respuesta enviaránull.
[!NOTE]
_reqy_nextse reciben por compatibilidad con middleware HTTP. Esta implementación no los utiliza.
Related
Esta función pertenece a la capa de middleware de services/api. Su salida está pensada para cualquier parte del backend que entregue errores al ciclo HTTP.
El diseño refleja un contrato de error uniforme para respuestas JSON. Eso facilita que el cliente reciba siempre error, code, field y details.