app.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import path from 'path';
  2. import Koa, { Context, DefaultState } from 'koa';
  3. import Router from 'koa-router';
  4. // 美化控制台
  5. import consola from 'consola/dist/consola';
  6. // 解析post的body体
  7. import bodyParser from 'koa-bodyparser';
  8. // 部分安全相关
  9. import helmet from 'koa-helmet';
  10. // 静态服务
  11. import koaStatic from 'koa-static'
  12. import controllers from './controllers';
  13. import config from './config';
  14. import redisMiddleware from './middlewares/redis';
  15. import limitMiddleware from './middlewares/limit';
  16. import logsMiddleware from './middlewares/logs';
  17. import responseMiddleware from './middlewares/response';
  18. const app = new Koa<DefaultState, Context>();
  19. /* 中间件 */
  20. // 安全防护
  21. app.use(helmet());
  22. // 静态资源
  23. app.use(koaStatic(path.join(__dirname, config.staticPath)))
  24. // post params解析
  25. app.use(bodyParser());
  26. // 日志
  27. app.use(logsMiddleware());
  28. // redis
  29. app.use(redisMiddleware());
  30. // 限流
  31. app.use(limitMiddleware());
  32. // 返回体格式
  33. app.use(responseMiddleware());
  34. app.on('error', (err, ctx: Context) => {
  35. ctx.$response(err, 'error', false);
  36. });
  37. // api 路由
  38. const apiRouter = new Router<DefaultState, Context>();
  39. apiRouter.get('/code', controllers.code);
  40. // 主路由
  41. const router = new Router<DefaultState, Context>();
  42. router.get('/', controllers.home);
  43. // api路由以/api前缀
  44. router.use('/api', apiRouter.routes(), apiRouter.allowedMethods());
  45. app.use(router.routes()).use(router.allowedMethods());
  46. const port = config.port;
  47. app.listen(port, () => {
  48. consola.success(`server is started at: http://localhost:${port}`)
  49. });