<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 前言 之所以特別說明這個目錄,是因為這個目錄其實是類似于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) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看