import { env } from "@config/env";
import { getLogger } from "@utils/asyncLocalStorage";
/**
* Error Handler Middleware
* @category Middlewares
* @param {IApiError} error The error object
* @param {Request} req The request object
* @param {Response} res The response object
* @param {NextFunction} _next The next function
* @returns {void}
*/
export function errorHandler(error, req, res, _next) {
const logger = getLogger();
logger.error({
error: error.message,
stack: error.stack,
url: req.url,
method: req.method,
ip: req.ip,
userAgent: req.get("User-Agent"),
}, "Unhandled error occurred");
const statusCode = error.statusCode || 500;
const message = error.isOperational ? error.message : "Internal Server Error";
res.status(statusCode).json({
success: false,
error: {
message,
...(env.NODE_ENV === "development" && { stack: error.stack }),
},
});
}
/**
* Not Found Handler Middleware
* @category Middlewares
* @param {Request} req The request object
* @param {Response} res The response object
* @returns {void}
*/
export function notFoundHandler(req, res) {
res.status(404).json({
success: false,
error: {
message: `Route ${req.method} ${req.path} not found`,
},
});
}
Source