import Koa from 'koa'; import bodyParser from 'koa-bodyparser'; import serve from 'koa-static'; import session from 'koa-session'; import path from 'path'; import { fileURLToPath } from 'url'; import config from './config/index.js'; import { decryptUrlMiddle } from './util/crypto/index.js'; import { stringUtils } from './util/stringClass.js'; import queryParamSanitizer from './middleware/queryParamSanitizer.js'; import commonRouter from './api/common/routes.js'; import mpsRouter from './api/mps/routes.js'; import yjbdcRouter from './api/yjbdc/routes.js'; import phonicsRouter from './api/phonics/routes.js'; import pinyinRouter from './api/pinyin/routes.js'; import hanziRouter from './api/hanzi/routes.js'; import mathcalculateRouter from './api/mathcalculate/routes.js'; import webRouter from './api/web/routes.js'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const app = new Koa(); // 使用中间件 app.use(bodyParser()); app.use(queryParamSanitizer()); // 静态文件服务 app.use(serve(__dirname + '/../public')); // 错误处理 app.use(async (ctx, next) => { try { await next(); } catch (err) { ctx.status = err.status || 500; ctx.body = { error: err.message, url: ctx.url }; console.log("error_url:"+ctx.url); ctx.app.emit('error', err, ctx); } }); // 设置签名密钥 app.keys = ['some secret hurr']; const SessionConfig = { key: 'koa.sess', // cookie密钥 maxAge: 86400000, // cookie的过期时间 maxAge in ms (default is 1 days) autoCommit: true, // 自动提交头部 overwrite: true, // 是否允许重写 httpOnly: true, // 是否允许js访问cookie signed: true, // 签名默认true rolling: true, // 每次请求强制设置cookie,重置cookie过期时间(默认:false) renew: true, // 当session快过期时更新session,以避免用户在操作时session过期 secure: process.env.NODE_ENV === 'production', // 仅在HTTPS下发送cookie sameSite: 'lax', // 跨站点cookie设置,'strict'|'lax'|'none' }; // 使用session中间件 app.use(session(SessionConfig, app)); //中间件 app.use(decryptUrlMiddle()); // 注册路由 app.use(commonRouter.routes()); app.use(commonRouter.allowedMethods()); app.use(mpsRouter.routes()); app.use(mpsRouter.allowedMethods()); app.use(phonicsRouter.routes()); app.use(phonicsRouter.allowedMethods()); app.use(pinyinRouter.routes()); app.use(pinyinRouter.allowedMethods()); app.use(hanziRouter.routes()); app.use(hanziRouter.allowedMethods()); app.use(mathcalculateRouter.routes()); app.use(mathcalculateRouter.allowedMethods()); app.use(webRouter.routes()); app.use(webRouter.allowedMethods()); app.use(yjbdcRouter.routes()); app.use(yjbdcRouter.allowedMethods()); // 启动服务器 app.listen(config.port, () => { console.log('Server IP:', stringUtils.GetServerIP()); console.log(`Server running on port ${config.port}`); });