CatPtain's picture
Upload 85 files
28e1dba verified
export const errorHandler = (err, req, res, next) => {
console.error('Error:', err);
// JWT错误
if (err.name === 'JsonWebTokenError') {
return res.status(401).json({ error: 'Invalid token' });
}
if (err.name === 'TokenExpiredError') {
return res.status(401).json({ error: 'Token expired' });
}
// GitHub API错误
if (err.response && err.response.status) {
const status = err.response.status;
const message = err.response.data?.message || 'GitHub API error';
if (status === 401) {
return res.status(500).json({
error: 'GitHub authentication failed',
details: 'GitHub token may be invalid or expired',
suggestion: 'Check GitHub token configuration'
});
}
if (status === 403) {
return res.status(500).json({
error: 'GitHub access forbidden',
details: 'Insufficient permissions or rate limit exceeded',
suggestion: 'Check repository permissions or wait for rate limit reset'
});
}
if (status === 404) {
return res.status(404).json({
error: 'Resource not found in GitHub',
details: message,
suggestion: 'Check if the repository or file exists'
});
}
if (status === 422) {
return res.status(413).json({
error: 'File too large for GitHub',
details: message,
suggestion: 'Try reducing file size or splitting into smaller files'
});
}
return res.status(500).json({
error: `GitHub API error: ${message}`,
details: `HTTP ${status}: ${message}`,
suggestion: 'Check GitHub service status or try again later'
});
}
// Axios 网络错误
if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
return res.status(503).json({
error: 'Service unavailable',
details: 'Cannot connect to GitHub API',
suggestion: 'Check network connection or GitHub service status'
});
}
if (err.code === 'ETIMEDOUT') {
return res.status(504).json({
error: 'Request timeout',
details: 'GitHub API request timed out',
suggestion: 'Try again with smaller data or check network connection'
});
}
// 自定义应用错误
if (err.message.includes('Too many slides failed to save')) {
return res.status(500).json({
error: 'Partial save failure',
details: err.message,
suggestion: 'Some slides could not be saved. Check individual slide content and try again.',
partialFailure: true
});
}
if (err.message.includes('Failed to save PPT')) {
return res.status(500).json({
error: 'PPT save failed',
details: err.message,
suggestion: 'Check PPT content and try saving again. Consider reducing file size if needed.'
});
}
// 默认错误
const isDevelopment = process.env.NODE_ENV === 'development';
res.status(500).json({
error: isDevelopment ? err.message : 'Internal server error',
details: isDevelopment ? err.stack : 'An unexpected error occurred',
suggestion: 'If the problem persists, please contact support',
timestamp: new Date().toISOString()
});
};