<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        深入理解 Koa 框架中間件原理

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:06:07
        文檔

        深入理解 Koa 框架中間件原理

        深入理解 Koa 框架中間件原理:Node 主要用在開發(fā) Web 應(yīng)用,koa 是目前 node 里最流行的 web 框架。 在 Node 開啟一個 http 服務(wù)簡直易如反掌,官網(wǎng) demo。 const http = require(http); const server = http.createServer((req, res) =>
        推薦度:
        導(dǎo)讀深入理解 Koa 框架中間件原理:Node 主要用在開發(fā) Web 應(yīng)用,koa 是目前 node 里最流行的 web 框架。 在 Node 開啟一個 http 服務(wù)簡直易如反掌,官網(wǎng) demo。 const http = require(http); const server = http.createServer((req, res) =>

        理解 Koa 的中間件機制(源碼分析)

        閱讀源碼,化繁為簡,我們看看 koa 的中間件系統(tǒng)是如何實現(xiàn)的。

        class Application extends Emitter {
         constructor() {
         super();
         this.middleware = [];
         },
        
         use(fn) {
         this.middleware.push(fn);
         return this;
         },
        
         callback() {
         const fn = compose(this.middleware);
        
         return function(req, res) {
         return fn(ctx);
         };
         },
        
         listen(...args) {
         const server = http.createServer(this.callback());
         return server.listen(...args);
         }
        }
        
        

        好了,精簡結(jié)束,一不小心,去枝末節(jié),最后只剩下不到 20 行代碼。

        這就是框架的核心,簡化后的代碼非常清晰,有點不可思議,但核心就是這么簡單。

        我們先分析以上代碼做了什么事。

      1. 我們定義了一個 middleware 數(shù)組來存儲中間件。
      2. 我們定一個了一個 use 方法來注冊一個中間件。其實就是簡單的 push 到自身的 mideware 這個數(shù)組中。
      3. 我們還使用了一個 compose 方法,傳入 middleware ,應(yīng)該是做了一些處理,返回了一個可執(zhí)行的方法。
      4. 你一定對中間的 compose 方法很好奇,初此之外的代碼都容易理解,唯獨這個 compose 不太知道究竟做了什么。

        其實, compose 就是整個中間件框架的核心。

        compose 之外,代碼已經(jīng)很清楚的定義了

      5. 中間件的存儲
      6. 中間件的注冊
      7. 而 compose 方法做了最為重要的一件事

      8. 中間件的執(zhí)行
      9. 核心源碼 compose

        先上碼

        function compose(middleware) {
         return function(context, next) {
         // last called middleware #
         let index = -1;
         return dispatch(0);
         function dispatch(i) {
         if (i <= index)
         return Promise.reject(new Error("next() called multiple times"));
         index = i;
         let fn = middleware[i];
         if (i === middleware.length) fn = next;
         if (!fn) return Promise.resolve();
         try {
         return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));
         } catch (err) {
         return Promise.reject(err);
         }
         }
         };
        }
        

        我試圖去簡化一下這個方法,但方法本身已經(jīng)足夠簡潔。

        代碼很簡潔。

        通過 next()傳遞 實現(xiàn)中間件調(diào)用, 結(jié)合 Promise 采用 遞歸調(diào)用 的通知機制。

        看圖

        這種形式的控制流讓整個 Koa 框架中間件的訪問呈現(xiàn)出 自上而下的中間件流 + 自下而上的 response 數(shù)據(jù)流 的形式。

        Koa 本身做的工作僅僅是定制了中間件的編寫規(guī)范,而不內(nèi)置任何中間件。一個 web request 會通過 Koa 的中間件棧,來動態(tài)完成 response 的處理。

        koa 在中間件語法上面采用了 async + await 語法來生成 Promise 形式的程序控制流。

        總結(jié)

        koa 是非常精簡的框架, 其中的精粹思想就是洋蔥模型(中間件模型), koa 框架的中間件模型非常好用并且簡潔, 但是也有自身的缺陷, 一旦中間件數(shù)組過于龐大, 性能會有所下降,我們需要結(jié)合自身的情況與業(yè)務(wù)場景作出最合適的選擇.

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        深入理解 Koa 框架中間件原理

        深入理解 Koa 框架中間件原理:Node 主要用在開發(fā) Web 應(yīng)用,koa 是目前 node 里最流行的 web 框架。 在 Node 開啟一個 http 服務(wù)簡直易如反掌,官網(wǎng) demo。 const http = require(http); const server = http.createServer((req, res) =>
        推薦度:
        標簽: 了解 理解 框架
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 九一在线完整视频免费观看| 韩国亚洲伊人久久综合影院| 99久久99这里只有免费的精品| 免费在线观看中文字幕| 亚洲熟妇久久精品| 免费鲁丝片一级在线观看| 在线aⅴ亚洲中文字幕| 免费观看的av毛片的网站| 亚洲AV综合永久无码精品天堂| 国产gav成人免费播放视频| 日韩毛片免费一二三| 最新精品亚洲成a人在线观看| 免费在线观影网站| 亚洲综合在线观看视频| 性做久久久久久免费观看| 亚洲精品国产综合久久久久紧| 国产精品极品美女免费观看 | 亚洲精品97久久中文字幕无码| 一级特黄色毛片免费看| 亚洲国产精品无码久久久蜜芽| 99精品在线免费观看| 亚洲日韩看片无码电影| 国产又大又黑又粗免费视频| 日韩成人毛片高清视频免费看| 亚洲成在人天堂一区二区| 最近最新MV在线观看免费高清| 国产成人综合亚洲| 亚洲国产另类久久久精品黑人| 精品无码国产污污污免费网站| 亚洲精品无码久久久久秋霞| 国产a v无码专区亚洲av| 久久久久国产精品免费看| 亚洲乱码国产乱码精华| 久久亚洲精品视频| 日韩毛片免费在线观看| 中国人免费观看高清在线观看二区| 中文字幕亚洲免费无线观看日本| 在线观看永久免费视频网站| 免费黄网站在线看| 亚洲av永久无码精品秋霞电影秋 | 一区二区亚洲精品精华液|