import Koa from 'koa'; import cors from '@koa/cors'; import Router from '@koa/router'; import bodyParser from '@koa/bodyparser'; import serve from 'koa-static'; import mount from 'koa-mount'; import path from 'path'; import { config } from './config'; import { connectDatabase } from './models'; import { errorHandler } from './middleware/errorHandler'; import authRoutes from './modules/auth/auth.controller'; import ttsRoutes from './modules/tts/tts.controller'; import audioRoutes from './modules/audio/audio.controller'; import memberRoutes from './modules/member/member.controller'; import shareRoutes from './modules/share/share.controller'; import aiRoutes from './modules/ai/ai.controller'; const app = new Koa(); const router = new Router(); // 中间件 app.use(errorHandler); app.use(cors({ origin: '*', allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowHeaders: ['Content-Type', 'Authorization'], })); app.use(bodyParser()); // 静态文件服务 - 音频文件 app.use(mount('/uploads', serve(config.upload.dir))); // 健康检查 router.get('/health', (ctx) => { ctx.body = { code: 0, message: 'ok', data: { status: 'healthy' } }; }); // 注册路由 router.use('/api/auth', authRoutes.routes()); router.use('/api/tts', ttsRoutes.routes()); router.use('/api/audio', audioRoutes.routes()); router.use('/api/member', memberRoutes.routes()); router.use('/api/share', shareRoutes.routes()); router.use('/api/ai', aiRoutes.routes()); app.use(router.routes()).use(router.allowedMethods()); // 启动服务 async function start() { try { await connectDatabase(); console.log('✅ MongoDB 连接成功'); app.listen(config.port, () => { console.log(`🚀 服务启动成功: http://localhost:${config.port}`); console.log(`📁 上传目录: ${config.upload.dir}`); }); } catch (error) { console.error('❌ 服务启动失败:', error); process.exit(1); } } start();