restifyx.js
Version:
Advanced API endpoint handler system with automatic documentation
60 lines • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createErrorHandler = createErrorHandler;
const ApiError_1 = require("./ApiError");
const logger_1 = require("../../utils/logger");
function createErrorHandler(options = {}) {
const logger = (0, logger_1.getLogger)();
return (err, req, res, next) => {
if (options.logErrors) {
if (err instanceof ApiError_1.ApiError) {
logger.warn(`API Error: ${err.message}`, {
error: err,
stack: options.logStackTrace ? err.stack : undefined,
path: req.path,
method: req.method,
});
}
else {
logger.error(`Unhandled error: ${err.message}`, {
error: err,
stack: options.logStackTrace ? err.stack : undefined,
path: req.path,
method: req.method,
});
}
}
if (err instanceof ApiError_1.ApiError) {
const response = {
status: "error",
statusCode: err.statusCode,
message: err.message,
errorCode: err.errorCode,
details: err.details,
timestamp: err.timestamp || Date.now(),
};
res.status(err.statusCode).json(response);
return;
}
const statusCode = 500;
const response = {
status: "error",
statusCode,
message: "Internal server error",
errorCode: "INTERNAL_ERROR",
timestamp: Date.now(),
};
if (options.includeErrorInResponse || options.debug) {
response.error = err.message;
}
if (options.includeStackInResponse || options.debug) {
response.stack = err.stack;
}
if (options.errorFormatter) {
const formattedError = options.errorFormatter(err);
Object.assign(response, formattedError);
}
res.status(statusCode).json(response);
};
}
//# sourceMappingURL=ErrorHandler.js.map