app.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import path from 'path';
  2. import Koa, { Context, DefaultState } from 'koa';
  3. // 路由
  4. import router from './router';
  5. // 美化控制台
  6. import consola from 'consola/dist/consola';
  7. // 解析post的body体
  8. import bodyParser from 'koa-bodyparser';
  9. // 部分安全相关
  10. import helmet from 'koa-helmet';
  11. // 静态服务
  12. import koaStatic from 'koa-static';
  13. // 请求转发
  14. import koaProxy from 'koa-proxies';
  15. import config from '@config';
  16. import redisMiddleware from './middlewares/redis';
  17. import limitMiddleware from './middlewares/limit';
  18. import logsMiddleware from './middlewares/logs';
  19. import responseMiddleware from './middlewares/response';
  20. import sessionMiddleware from './middlewares/session';
  21. // import authMiddleware from './middlewares/auth';
  22. import localDbMiddleware from './middlewares/localDb';
  23. import { loggerInstance } from '@utils/logger';
  24. const app = new Koa<DefaultState, Context>();
  25. // 为了获取到真实的ip
  26. // https://github.com/koajs/koa/issues/599
  27. app.proxy = true;
  28. /* 中间件 */
  29. // 安全防护
  30. app.use(helmet());
  31. // 静态资源
  32. app.use(koaStatic(path.join(__dirname, config.staticPath)))
  33. // 返回体格式
  34. app.use(responseMiddleware());
  35. // post params解析
  36. app.use(bodyParser());
  37. // 本地嵌入式数据库
  38. app.use(localDbMiddleware())
  39. // 日志
  40. app.use(logsMiddleware());
  41. // redis
  42. app.use(redisMiddleware());
  43. // 限流
  44. app.use(limitMiddleware());
  45. // session
  46. app.use(sessionMiddleware(app))
  47. // auth
  48. // app.use(authMiddleware())
  49. // 请求转发
  50. app.use(koaProxy('/proxy', {
  51. target: 'https://demo.com',
  52. changeOrigin: true,
  53. logs: true,
  54. rewrite: path => path.replace(/^\/proxy(\/|\/\w+)?$/, '/')
  55. }))
  56. app.on('error', (err, ctx: Context) => {
  57. ctx.$response(err, 'error', false);
  58. const errMsg: string = err.message || '服务出错';
  59. console.log(errMsg);
  60. console.log(ctx);
  61. loggerInstance(ctx).error(errMsg)
  62. });
  63. // 注册路由
  64. app.use(router.routes()).use(router.allowedMethods());
  65. const port = config.port;
  66. app.listen(port, () => {
  67. consola.success(`server is started at: http://localhost:${port}`)
  68. });