@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
JavaScript
;
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;