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;