80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const http = require('http');
|
|
require('dotenv').config();
|
|
|
|
const sequelize = require('./config/database');
|
|
const { initWebSocket } = require('./websocket');
|
|
|
|
// 路由
|
|
const userRoutes = require('./routes/user');
|
|
const storeRoutes = require('./routes/store');
|
|
const ladderRoutes = require('./routes/ladder');
|
|
const matchRoutes = require('./routes/match');
|
|
const pointsRoutes = require('./routes/points');
|
|
const adminRoutes = require('./routes/admin');
|
|
const uploadRoutes = require('./routes/upload');
|
|
|
|
const app = express();
|
|
const server = http.createServer(app);
|
|
|
|
// 中间件
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use('/uploads', express.static('uploads'));
|
|
|
|
// API路由
|
|
app.use('/api/user', userRoutes);
|
|
app.use('/api/store', storeRoutes);
|
|
app.use('/api/ladder', ladderRoutes);
|
|
app.use('/api/match', matchRoutes);
|
|
app.use('/api/points', pointsRoutes);
|
|
app.use('/api/admin', adminRoutes);
|
|
app.use('/api/upload', uploadRoutes);
|
|
|
|
// 健康检查
|
|
app.get('/health', (req, res) => {
|
|
res.json({ status: 'ok', time: new Date().toISOString() });
|
|
});
|
|
|
|
// 错误处理
|
|
app.use((err, req, res, next) => {
|
|
console.error('Error:', err);
|
|
res.status(err.status || 500).json({
|
|
code: err.code || 500,
|
|
message: err.message || '服务器内部错误'
|
|
});
|
|
});
|
|
|
|
// 初始化WebSocket
|
|
initWebSocket(server);
|
|
|
|
// 启动服务
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
async function startServer() {
|
|
try {
|
|
// 测试数据库连接
|
|
await sequelize.authenticate();
|
|
console.log('数据库连接成功');
|
|
|
|
// 同步模型(开发环境)
|
|
// 注意:如果遇到 ER_TOO_MANY_KEYS 错误,需要手动清理数据库中多余的索引
|
|
if (process.env.NODE_ENV === 'development') {
|
|
// 使用 alter: false 避免索引过多的问题
|
|
await sequelize.sync({ alter: false });
|
|
console.log('数据库模型同步完成');
|
|
}
|
|
|
|
server.listen(PORT, () => {
|
|
console.log(`服务器运行在 http://localhost:${PORT}`);
|
|
});
|
|
} catch (error) {
|
|
console.error('启动失败:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
startServer();
|