## 前言
之所以特别说明这个目录,是因为这个目录其实是类似于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)
```
- 相关资源链接
- 米乐星球小程序内调研
- 项目结构说明
- 交互课件说明
- server项目说明
- 项目说明
- 项目启动
- app.js做的事情
- 获取互动课件的地址
- 分析互动课件地址的参数
- policy目录--lesson.js
- 解析ppt--api/lesson.js
- 信令中的key:template
- 信令中的key:media
- kk-talkee-engine.js
- Message
- 课件模板页的识别过程
- 解析课件模板的源文件
- 场景与模板的对应关系
- 所有场景的基类
- choiceScence为例
- 注意事项
- ws
- online项目的说明
- online消息
- 课件编辑项目
- 资源链接
- 基本项目信息
- electron项目结构分析
- ipc
- 模板题组
- 普通题组
- 游戏题组
- 课件导出内容分析
- 课件模板分类明细
- 图片题
- 视频题
- 音频题
- 选择题
- 判断题
- 转盘
- 筛子
- 图层拖拽
- 动画题
- 翻拍题
- 语音题
- 201908变更
- 课件制作流程分析
- 菜单配置
- 入口操作
- 定义模板布局与初始化
- 选择素材
- 导出过程
- egret
- interface
- ad选择器模板
- ab选择器模板
- 图层拖拽模板
- 判断题模板
- xml
- 转盘
- events
- components
- 父类组件
- 基本组件
- 判断题组件
- 龙骨动画调研
- 基本了解
- 产品原型
- 白板Client项目
- 消息类型
- 白板项目分析
- 入口