- Change VITE_API_URL in .env from localhost:3000 to localhost:3001 for backend access. - Update index.html to replace favicon with logo.png and ensure proper HTML structure. - Add new dependencies for WangEditor in package.json and package-lock.json to support rich text editing features.
86 lines
2.4 KiB
JavaScript
86 lines
2.4 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 articleRoutes = require('./routes/article');
|
||
const pointsRoutes = require('./routes/points');
|
||
const adminRoutes = require('./routes/admin');
|
||
const uploadRoutes = require('./routes/upload');
|
||
|
||
const app = express();
|
||
const server = http.createServer(app);
|
||
|
||
// 信任代理(支持反向代理的 HTTPS)
|
||
// 如果应用部署在 nginx 等反向代理后面,需要设置此项
|
||
app.set('trust proxy', true);
|
||
|
||
// 中间件
|
||
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.use('/api/article', articleRoutes);
|
||
|
||
// 健康检查
|
||
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();
|