app.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import Koa from 'koa';
  2. import cors from '@koa/cors';
  3. import Router from '@koa/router';
  4. import bodyParser from '@koa/bodyparser';
  5. import serve from 'koa-static';
  6. import mount from 'koa-mount';
  7. import path from 'path';
  8. import { config } from './config';
  9. import { connectDatabase } from './models';
  10. import { errorHandler } from './middleware/errorHandler';
  11. import authRoutes from './modules/auth/auth.controller';
  12. import ttsRoutes from './modules/tts/tts.controller';
  13. import audioRoutes from './modules/audio/audio.controller';
  14. import memberRoutes from './modules/member/member.controller';
  15. import shareRoutes from './modules/share/share.controller';
  16. import aiRoutes from './modules/ai/ai.controller';
  17. const app = new Koa();
  18. const router = new Router();
  19. // 中间件
  20. app.use(errorHandler);
  21. app.use(cors({
  22. origin: '*',
  23. allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  24. allowHeaders: ['Content-Type', 'Authorization'],
  25. }));
  26. app.use(bodyParser());
  27. // 静态文件服务 - 音频文件
  28. app.use(mount('/uploads', serve(config.upload.dir)));
  29. // 健康检查
  30. router.get('/health', (ctx) => {
  31. ctx.body = { code: 0, message: 'ok', data: { status: 'healthy' } };
  32. });
  33. // 注册路由
  34. router.use('/api/auth', authRoutes.routes());
  35. router.use('/api/tts', ttsRoutes.routes());
  36. router.use('/api/audio', audioRoutes.routes());
  37. router.use('/api/member', memberRoutes.routes());
  38. router.use('/api/share', shareRoutes.routes());
  39. router.use('/api/ai', aiRoutes.routes());
  40. app.use(router.routes()).use(router.allowedMethods());
  41. // 启动服务
  42. async function start() {
  43. try {
  44. await connectDatabase();
  45. console.log('✅ MongoDB 连接成功');
  46. app.listen(config.port, () => {
  47. console.log(`🚀 服务启动成功: http://localhost:${config.port}`);
  48. console.log(`📁 上传目录: ${config.upload.dir}`);
  49. });
  50. } catch (error) {
  51. console.error('❌ 服务启动失败:', error);
  52. process.exit(1);
  53. }
  54. }
  55. start();