diff --git a/backend/src/index.js b/backend/src/index.js index f1f0bc7..5220d8c 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -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' }); diff --git a/backend/src/middleware/errorHandler.js b/backend/src/middleware/errorHandler.js new file mode 100644 index 0000000..f3df715 --- /dev/null +++ b/backend/src/middleware/errorHandler.js @@ -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;