Source

middlewares/errorHandler.js

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`,
        },
    });
}