41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
const { AppError } = require('../shared/errors');
|
|
const ResponseHandler = require('../shared/response.handler');
|
|
const config = require('../config');
|
|
|
|
const errorHandler = (err, req, res, next) => {
|
|
if (config.isDevelopment) {
|
|
console.error('Error caught by middleware:', err);
|
|
}
|
|
|
|
if (err instanceof AppError) {
|
|
return ResponseHandler.error(res, err.message, err.statusCode, err.errors);
|
|
}
|
|
|
|
if (
|
|
err.name === 'SequelizeValidationError' ||
|
|
err.name === 'SequelizeUniqueConstraintError'
|
|
) {
|
|
const errors = err.errors
|
|
? err.errors.map((e) => ({ field: e.path, message: e.message }))
|
|
: null;
|
|
return ResponseHandler.badRequest(res, 'Validation error', errors);
|
|
}
|
|
|
|
if (err.name === 'ValidationError' && err.errors) {
|
|
const errors = Object.keys(err.errors).map((key) => ({
|
|
field: key,
|
|
message: err.errors[key].message,
|
|
}));
|
|
return ResponseHandler.badRequest(res, 'Validation error', errors);
|
|
}
|
|
|
|
if (err.name === 'CastError') {
|
|
return ResponseHandler.badRequest(res, 'Invalid ID format');
|
|
}
|
|
|
|
const message = config.isDevelopment ? err.message : 'Internal server error';
|
|
return ResponseHandler.internalError(res, message, err);
|
|
};
|
|
|
|
module.exports = errorHandler;
|