💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 前言 之所以特别说明这个目录,是因为这个目录其实是类似于koa的middleware的中间拦截器目录,可以拦截到所有的请求。 ## 追本溯源 在kk-koa-framework的模块源码中,我们可以找到这样的代码,在其setup文件夹中有policy的文件,其作用就是识别config目录中的policy文件,如果是文件夹,那么遍历文件夹内的所有文件,然后对所有的路由执行这个文件内的方法。**这个执行要优先于控制器的执行代码**。 ``` const fs = require('fs') const path = require('path') var Router = require('koa-router') module.exports = app => { let filepath = path.join(app.$$.CONFIG_DIR, 'policy.js') if (!fs.existsSync(filepath)) { return } var router = new Router() let cfg = require(filepath) for (let k in cfg) { let files = cfg[k] || [] files.map(file => path.join(app.$$.SOURCE_DIR, 'policy', file + '.js')) .filter(file => fs.existsSync(file)).map(file => { router.all(k, require(file)) }) } app.use(router.routes()).use(router.allowedMethods()) } ``` ## config/policy.js 需要特殊处理的路由配置 ``` module.exports = { '/:identity/:userId/:lessonId/:periodId/:partId': ['lesson'], '/playback/:lessonId/:periodId/:partId':['lesson'], '/online/playback/:periodId':['lesson'], '/vroom/:identity/:userId/:lessonId/:periodId/:partId':['lesson'] }; ``` ## policy/lesson.js 所有我们配置到policy目录的路由,配置了lesson的都会进入到lesson.js拦截,在这个文件里,主要是针对特定参数进行查询与使用: ``` const { userId, identity, lessonId, periodId, partId } = ctx.params; console.log("lessonUrl:", ctx.originalUrl, new Date().toString()) if (lessonId && periodId && partId) { // 验证部分 httpParametersVerify } ``` 解析转换xml文件的信息,使用parseFile这个方法,得到的数据是:包括了场景需要的行为,属性,资源,场景等。场景是全部的。 ![](https://box.kancloud.cn/7830172db7373c90a37cc211cf7daedd_540x170.png) 获取ppt图片信息,在这个过程中将需要的信息都放到了ctx的上下文中。 ``` let json = { userId: userId || 0, identity: identity || "guest", lessonId, periodId, partId, sign: ctx.query.sign || "", time: ctx.query.time || ctx.query.t || 0, controlPanel: ctx.query.controlPanel === undefined ? true : !!+ctx.query.controlPanel, KKClient: getKKClient(ctx.headers['user-agent']), commonResouces } let data = await getPPTImageForApi(periodId, lessonId) ```