UNPKG

@ticatec/express-exception

Version:

A comprehensive set of reusable error classes and middleware for Node.js Express applications with standardized error handling and consistent response formats.

80 lines (79 loc) 3.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleError = void 0; const Errors_1 = require("./Errors"); const ip_1 = __importDefault(require("ip")); const log4js_1 = __importDefault(require("log4js")); /** Logger instance for error handling operations */ let logger = log4js_1.default.getLogger('ErrorHandler'); /** * Sends a JSON response with the specified status code and data. * @param res - Express response object * @param statusCode - HTTP status code to send * @param data - Data to include in the JSON response body */ const sendResponse = (res, statusCode, data) => { res.status(statusCode).json(data); }; /** * Determines the appropriate HTTP status code and application error code based on the error type. * @param err - The error object to analyze * @returns An object containing the HTTP status code, application error code, and optional message */ const getErrorCode = (err) => { if (err instanceof Errors_1.UnauthenticatedError) { return { status: 401, code: -1 }; } else if (err instanceof Errors_1.InsufficientPermissionError) { return { status: 403, code: -1 }; } else if (err instanceof Errors_1.IllegalParameterError) { return { status: 400, code: -1, message: err.message }; } else if (err instanceof Errors_1.ActionNotFoundError) { return { status: 404, code: -1 }; } else if (err instanceof Errors_1.AppError) { return { status: 500, code: err.code, message: err.message }; } else { logger.error(err); return { status: 500, code: -1 }; } }; /** * Sends a standardized error response to the client with comprehensive error information. * @param req - Express request object containing client and request information * @param res - Express response object used to send the error response * @param err - The error object to be processed and sent to the client */ const sendApplicationError = (req, res, err) => { let respCode = getErrorCode(err); let data = { code: respCode.code, host: ip_1.default.address(), client: req.ip, path: req.baseUrl + req.path, method: req.method, timestamp: (new Date()).getTime(), message: (respCode.message != null && respCode.message != '') ? respCode.message : null }; if (req.get('env') == 'development' || req.get('env') == 'dev') { data.stack = err.stack; } sendResponse(res, respCode.status, data); }; /** * Express error handling middleware that processes all application errors. * This function serves as the main entry point for error handling in Express applications. * @param err - The error object that was thrown or passed to next() * @param req - Express request object * @param res - Express response object */ const handleError = (err, req, res) => { sendApplicationError(req, res, err); }; exports.handleError = handleError;