Initial commit
This commit is contained in:
57
server/middleware/errorHandler.js
Normal file
57
server/middleware/errorHandler.js
Normal file
@@ -0,0 +1,57 @@
|
||||
function errorHandler(error, req, res, next) {
|
||||
console.error('Error occurred:', error);
|
||||
|
||||
// Default error response
|
||||
let statusCode = 500;
|
||||
let message = 'Internal server error';
|
||||
let details = null;
|
||||
|
||||
// Handle specific error types
|
||||
if (error.name === 'ValidationError') {
|
||||
statusCode = 400;
|
||||
message = 'Validation error';
|
||||
details = error.details || error.message;
|
||||
} else if (error.name === 'UnauthorizedError') {
|
||||
statusCode = 401;
|
||||
message = 'Unauthorized';
|
||||
} else if (error.name === 'SequelizeValidationError') {
|
||||
statusCode = 400;
|
||||
message = 'Database validation error';
|
||||
details = error.errors.map(err => ({
|
||||
field: err.path,
|
||||
message: err.message
|
||||
}));
|
||||
} else if (error.name === 'SequelizeUniqueConstraintError') {
|
||||
statusCode = 409;
|
||||
message = 'Resource already exists';
|
||||
details = error.errors.map(err => ({
|
||||
field: err.path,
|
||||
message: err.message
|
||||
}));
|
||||
} else if (error.name === 'SequelizeForeignKeyConstraintError') {
|
||||
statusCode = 400;
|
||||
message = 'Invalid reference';
|
||||
} else if (error.status) {
|
||||
statusCode = error.status;
|
||||
message = error.message;
|
||||
}
|
||||
|
||||
// Send error response
|
||||
const response = {
|
||||
success: false,
|
||||
message,
|
||||
timestamp: new Date().toISOString()
|
||||
};
|
||||
|
||||
// Include error details in development
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
response.error = details || error.message;
|
||||
response.stack = error.stack;
|
||||
} else if (details) {
|
||||
response.details = details;
|
||||
}
|
||||
|
||||
res.status(statusCode).json(response);
|
||||
}
|
||||
|
||||
module.exports = errorHandler;
|
||||
Reference in New Issue
Block a user