Files
ICICI_backend/src/middlewares/error.js
2024-10-11 13:20:53 +05:30

56 lines
1.8 KiB
JavaScript

const { UniqueConstraintError, BaseError, ValidationError } = require("sequelize");
const ApiError = require("../utils/handler/ApiError.handler");
const config = require("../config/config");
const httpStatus = require("http-status");
const logger = require("../config/logger");
const multer = require("multer");
const errorConverter = (err, req, res, next) => {
let error = err;
if (error instanceof multer.MulterError) {
// Handle Multer errors
error = new ApiError(httpStatus.BAD_REQUEST, error.message, error, true, err.stack);
} else if (error instanceof ValidationError || error instanceof UniqueConstraintError) {
// Handle Sequelize validation and unique constraint errors
const messages = error.errors.map(e => e.message);
error = new ApiError(httpStatus.BAD_REQUEST, messages.join(", "), messages, true, err.stack);
} else if (!(error instanceof ApiError)) {
// Handle other errors
const statusCode =
error.statusCode || error instanceof BaseError ? httpStatus.BAD_REQUEST : httpStatus.INTERNAL_SERVER_ERROR;
const message = error.message || httpStatus[statusCode];
error = new ApiError(statusCode, message, error, false, err.stack);
}
next(error);
};
// eslint-disable-next-line no-unused-vars
const errorHandler = (err, req, res, next) => {
let { statusCode, message } = err;
if (config.env === 'production' && !err.isOperational) {
statusCode = httpStatus.INTERNAL_SERVER_ERROR;
message = httpStatus[httpStatus.INTERNAL_SERVER_ERROR];
}
res.locals.errorMessage = err.message;
const response = {
code: statusCode,
message,
...(config.env === 'development' && { stack: err.stack }),
};
if (config.env === 'development') {
logger.error(err);
}
res.status(statusCode).send(response);
};
module.exports = {
errorConverter,
errorHandler,
};