// 入口文件 — 组装所有模块 const express = require('express'); const http = require('http'); const { WebSocketServer } = require('ws'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const { v4: uuidv4 } = require('uuid'); const db = require('./db'); const wsModule = require('./ws'); const { authMiddleware } = require('./middleware/auth'); const app = express(); const server = http.createServer(app); const wss = new WebSocketServer({ server }); // 中间件 app.use(express.json()); app.use(express.static(path.join(__dirname, 'public'))); // 上传目录 const uploadsDir = path.join(__dirname, 'data', 'uploads'); if (!fs.existsSync(uploadsDir)) fs.mkdirSync(uploadsDir, { recursive: true }); app.use('/uploads', express.static(uploadsDir)); // Multer 配置 const storage = multer.diskStorage({ destination: uploadsDir, filename: (req, file, cb) => { const ext = path.extname(file.originalname); const safeName = uuidv4().replace(/-/g, '').substring(0, 12); cb(null, safeName + ext); } }); const upload = multer({ storage, limits: { fileSize: 10 * 1024 * 1024 }, fileFilter: (req, file, cb) => { const allowed = ['image/jpeg', 'image/png', 'image/gif', 'image/webp']; cb(null, allowed.includes(file.mimetype)); } }); // 路由 app.use('/api', require('./routes/auth')); app.use('/api/rooms', require('./routes/rooms')); app.use('/api/rooms', require('./routes/messages')); app.use('/api', require('./routes/purchases')); // 上传 app.post('/api/upload', authMiddleware, upload.single('file'), (req, res) => { if (!req.file) return res.status(400).json({ error: '请上传图片' }); res.json({ path: '/uploads/' + req.file.filename }); }); // WebSocket wsModule.init(wss); // 启动 const PORT = process.env.PORT || 3000; server.listen(PORT, () => console.log(`Server running on port ${PORT}`));