Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
import { logger } from '../utils/logger.js';
|
|
|
|
export default function errorHandler(err, req, res, next) {
|
|
logger.error('Error:', err);
|
|
|
|
// Mongoose validation error
|
|
if (err.name === 'ValidationError') {
|
|
const errors = Object.values(err.errors).map(e => e.message);
|
|
return res.status(400).json({
|
|
error: 'Validation failed',
|
|
details: errors
|
|
});
|
|
}
|
|
|
|
// Mongoose duplicate key error
|
|
if (err.code === 11000) {
|
|
const field = Object.keys(err.keyPattern)[0];
|
|
return res.status(409).json({
|
|
error: `Duplicate value for field: ${field}`
|
|
});
|
|
}
|
|
|
|
// JWT errors
|
|
if (err.name === 'JsonWebTokenError') {
|
|
return res.status(401).json({
|
|
error: 'Invalid token'
|
|
});
|
|
}
|
|
|
|
if (err.name === 'TokenExpiredError') {
|
|
return res.status(401).json({
|
|
error: 'Token expired'
|
|
});
|
|
}
|
|
|
|
// Default error
|
|
res.status(err.status || 500).json({
|
|
error: err.message || 'Internal server error',
|
|
...(process.env.NODE_ENV === 'development' && { stack: err.stack })
|
|
});
|
|
} |