Initial commit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user