app.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import Koa from 'koa';
  2. import bodyParser from 'koa-bodyparser';
  3. import serve from 'koa-static';
  4. import session from 'koa-session';
  5. import path from 'path';
  6. import { fileURLToPath } from 'url';
  7. import config from './config/index.js';
  8. import { decryptUrlMiddle } from './util/crypto/index.js';
  9. import { stringUtils } from './util/stringClass.js';
  10. import queryParamSanitizer from './middleware/queryParamSanitizer.js';
  11. import commonRouter from './api/common/routes.js';
  12. import mpsRouter from './api/mps/routes.js';
  13. import yjbdcRouter from './api/yjbdc/routes.js';
  14. import phonicsRouter from './api/phonics/routes.js';
  15. import pinyinRouter from './api/pinyin/routes.js';
  16. import hanziRouter from './api/hanzi/routes.js';
  17. import mathcalculateRouter from './api/mathcalculate/routes.js';
  18. import webRouter from './api/web/routes.js';
  19. const __dirname = path.dirname(fileURLToPath(import.meta.url));
  20. const app = new Koa();
  21. // 使用中间件
  22. app.use(bodyParser());
  23. app.use(queryParamSanitizer());
  24. // 静态文件服务
  25. app.use(serve(__dirname + '/../public'));
  26. // 错误处理
  27. app.use(async (ctx, next) => {
  28. try {
  29. await next();
  30. } catch (err) {
  31. ctx.status = err.status || 500;
  32. ctx.body = {
  33. error: err.message,
  34. url: ctx.url
  35. };
  36. console.log("error_url:"+ctx.url);
  37. ctx.app.emit('error', err, ctx);
  38. }
  39. });
  40. // 设置签名密钥
  41. app.keys = ['some secret hurr'];
  42. const SessionConfig = {
  43. key: 'koa.sess', // cookie密钥
  44. maxAge: 86400000, // cookie的过期时间 maxAge in ms (default is 1 days)
  45. autoCommit: true, // 自动提交头部
  46. overwrite: true, // 是否允许重写
  47. httpOnly: true, // 是否允许js访问cookie
  48. signed: true, // 签名默认true
  49. rolling: true, // 每次请求强制设置cookie,重置cookie过期时间(默认:false)
  50. renew: true, // 当session快过期时更新session,以避免用户在操作时session过期
  51. secure: process.env.NODE_ENV === 'production', // 仅在HTTPS下发送cookie
  52. sameSite: 'lax', // 跨站点cookie设置,'strict'|'lax'|'none'
  53. };
  54. // 使用session中间件
  55. app.use(session(SessionConfig, app));
  56. //中间件
  57. app.use(decryptUrlMiddle());
  58. // 注册路由
  59. app.use(commonRouter.routes());
  60. app.use(commonRouter.allowedMethods());
  61. app.use(mpsRouter.routes());
  62. app.use(mpsRouter.allowedMethods());
  63. app.use(phonicsRouter.routes());
  64. app.use(phonicsRouter.allowedMethods());
  65. app.use(pinyinRouter.routes());
  66. app.use(pinyinRouter.allowedMethods());
  67. app.use(hanziRouter.routes());
  68. app.use(hanziRouter.allowedMethods());
  69. app.use(mathcalculateRouter.routes());
  70. app.use(mathcalculateRouter.allowedMethods());
  71. app.use(webRouter.routes());
  72. app.use(webRouter.allowedMethods());
  73. app.use(yjbdcRouter.routes());
  74. app.use(yjbdcRouter.allowedMethods());
  75. // 启动服务器
  76. app.listen(config.port, () => {
  77. console.log('Server IP:', stringUtils.GetServerIP());
  78. console.log(`Server running on port ${config.port}`);
  79. });