后端: 添加统一错误处理中间件

This commit is contained in:
Backend Developer 2026-03-10 08:16:53 +00:00
parent cc24894cf8
commit 6fa87784a9
2 changed files with 61 additions and 0 deletions

View File

@ -4,6 +4,7 @@ const authRoutes = require('./routes/auth');
const fileRoutes = require('./routes/files');
const shareRoutes = require('./routes/share');
const syncRoutes = require('./routes/sync');
const errorHandler = require('./middleware/errorHandler');
const app = express();
const PORT = process.env.PORT || 3000;
@ -17,6 +18,9 @@ app.use('/api/files', fileRoutes);
app.use('/api/share', shareRoutes);
app.use('/api/sync', syncRoutes);
// Error handler
app.use(errorHandler);
// Health check
app.get('/api/health', (req, res) => {
res.json({ status: 'ok' });

View File

@ -0,0 +1,57 @@
// 统一错误处理中间件
const errorHandler = (err, req, res, next) => {
console.error('Error:', err);
// JWT 错误
if (err.name === 'JsonWebTokenError') {
return res.status(401).json({
success: false,
error: 'Invalid token',
code: 'INVALID_TOKEN'
});
}
if (err.name === 'TokenExpiredError') {
return res.status(401).json({
success: false,
error: 'Token expired',
code: 'TOKEN_EXPIRED'
});
}
// Multer 文件上传错误
if (err.code === 'LIMIT_FILE_SIZE') {
return res.status(400).json({
success: false,
error: 'File too large',
code: 'FILE_TOO_LARGE'
});
}
if (err.code === 'LIMIT_FILE_COUNT') {
return res.status(400).json({
success: false,
error: 'Too many files',
code: 'TOO_MANY_FILES'
});
}
// 数据库错误
if (err.code === 'SQLITE_CONSTRAINT') {
return res.status(400).json({
success: false,
error: 'Data constraint violation',
code: 'CONSTRAINT_VIOLATION'
});
}
// 默认错误
const statusCode = err.statusCode || 500;
res.status(statusCode).json({
success: false,
error: err.message || 'Internal server error',
code: err.code || 'INTERNAL_ERROR'
});
};
module.exports = errorHandler;