Resume / backend /src /middleware /errorHandler.js
AFAautomation's picture
Initial commit with LFS enabled
92a138e
Raw
History Blame Contribute Delete
1.38 kB
const logger = require('../config/logger');
const multer = require('multer');
// eslint-disable-next-line no-unused-vars
function errorHandler(err, req, res, next) {
// Multer errors
if (err instanceof multer.MulterError) {
const messages = {
LIMIT_FILE_SIZE: `File too large. Maximum allowed size is ${process.env.MAX_FILE_SIZE_MB || 10} MB`,
LIMIT_FILE_COUNT: 'Too many files uploaded',
LIMIT_UNEXPECTED_FILE: err.message || 'Unexpected file field',
};
return res.status(400).json({
success: false,
message: messages[err.code] || `Upload error: ${err.message}`,
});
}
// Validation errors (express-validator)
if (Array.isArray(err)) {
return res.status(422).json({ success: false, errors: err });
}
// JWT / auth errors
if (err.name === 'UnauthorizedError') {
return res.status(401).json({ success: false, message: 'Invalid token' });
}
// Known operational errors
if (err.status && err.status < 500) {
return res.status(err.status).json({ success: false, message: err.message });
}
// Unknown server errors
logger.error(err);
return res.status(500).json({
success: false,
message:
process.env.NODE_ENV === 'production' ? 'Internal server error' : err.message,
...(process.env.NODE_ENV !== 'production' && { stack: err.stack }),
});
}
module.exports = errorHandler;