const logger = require('../utils/logger'); const errorHandler = (err, req, res, next) => { let error = { ...err }; error.message = err.message; // Log error logger.error(err); // Mongoose bad ObjectId if (err.name === 'CastError') { const message = 'Resource not found'; error = { message, statusCode: 404 }; } // Mongoose duplicate key if (err.code === 11000) { const message = 'Duplicate field value entered'; error = { message, statusCode: 400 }; } // Mongoose validation error if (err.name === 'ValidationError') { const message = Object.values(err.errors).map(val => val.message).join(', '); error = { message, statusCode: 400 }; } // Sequelize validation error if (err.name === 'SequelizeValidationError') { const message = err.errors.map(e => e.message).join(', '); error = { message, statusCode: 400 }; } // Sequelize unique constraint error if (err.name === 'SequelizeUniqueConstraintError') { const message = 'Duplicate field value entered'; error = { message, statusCode: 400 }; } // JWT errors if (err.name === 'JsonWebTokenError') { const message = 'Invalid token'; error = { message, statusCode: 401 }; } if (err.name === 'TokenExpiredError') { const message = 'Token expired'; error = { message, statusCode: 401 }; } res.status(error.statusCode || 500).json({ success: false, error: error.message || 'Server Error', ...(process.env.NODE_ENV === 'development' && { stack: err.stack }) }); }; module.exports = errorHandler;