<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關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        比較express與koa中間件模式的區別與聯系

        來源:懂視網 責編:小OO 時間:2020-11-27 15:20:25
        文檔

        比較express與koa中間件模式的區別與聯系

        起因;最近在學習koa的使用,由于koa是相當基礎的web框架,所以一個完整的web應用所需要的東西大都以中間件的形式引入,比如koa-router.koa-view等。在koa的文檔里有提到:koa的中間件模式與express的是不一樣的,koa是洋蔥型,express是直線型,至于為什么這樣,網上很多文章并沒有具體分析。或者簡單的說是async/await的特性之類。先不說這種說法的對錯,對于我來說這種說法還是太模糊了。所以我決定通過源碼來分析二者中間件實現的原理以及用法的異同。為了簡單起見這里的express用connect代替(實現原理是一致的)。用法;二者都以官網(github)文檔為準。connect;下面是官網的用法。;
        推薦度:
        導讀起因;最近在學習koa的使用,由于koa是相當基礎的web框架,所以一個完整的web應用所需要的東西大都以中間件的形式引入,比如koa-router.koa-view等。在koa的文檔里有提到:koa的中間件模式與express的是不一樣的,koa是洋蔥型,express是直線型,至于為什么這樣,網上很多文章并沒有具體分析。或者簡單的說是async/await的特性之類。先不說這種說法的對錯,對于我來說這種說法還是太模糊了。所以我決定通過源碼來分析二者中間件實現的原理以及用法的異同。為了簡單起見這里的express用connect代替(實現原理是一致的)。用法;二者都以官網(github)文檔為準。connect;下面是官網的用法。;
        本篇文章主要介紹了詳解express與koa中間件模式對比,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

        起因

        最近在學習koa的使用, 由于koa是相當基礎的web框架,所以一個完整的web應用所需要的東西大都以中間件的形式引入,比如koa-router, koa-view等。在koa的文檔里有提到:koa的中間件模式與express的是不一樣的,koa是洋蔥型,express是直線型,至于為什么這樣,網上很多文章并沒有具體分析。或者簡單的說是async/await的特性之類。先不說這種說法的對錯,對于我來說這種說法還是太模糊了。所以我決定通過源碼來分析二者中間件實現的原理以及用法的異同。

        為了簡單起見這里的express用connect代替(實現原理是一致的)

        用法

        二者都以官網(github)文檔為準

        connect

        下面是官網的用法:

        根據文檔我們可以看到,connect是提供簡單的路由功能的:

        connect的中間件是線性的,next過后繼續尋找下一個中間件,這種模式直覺上也很好理解,中間件就是一系列數組,通過路由匹配來尋找相應路由的處理方法也就是中間件。事實上connect也是這么實現的。

        app.use 就是往中間件數組中塞入新的中間件。中間件的執行則依靠私有方法 app.handle 進行處理,express也是相同的道理。

        koa

        相對connect,koa的中間件模式就不那么直觀了,借用網上的圖表示:

        也就是koa處理完中間件后還會回來走一趟,這就給了我們更加大的操作空間,來看看koa的官網實例:

        很明顯,當koa處理中間件遇到await next()的時候會暫停當前中間件進而處理下一個中間件,最后再回過頭來繼續處理剩下的任務,雖然說起來很復雜,但是直覺上我們會有一種隱隱熟悉的感覺:不就是回調函數嗎。這里暫且不說具體實現方法,但是確實就是回調函數。跟async/await的特性并無任何關系。

        源碼簡析

        connect與koa中間件模式區別的核心就在于next的實現,讓我們簡單看下二者next的實現。

        connect

        connect的源碼相當少加上注釋也就200來行,看起來也很清楚,connect中間件處理在于proto.handle這個私有方法,同樣next也是在這里實現的

        刪掉混淆的代碼后 我們可以看到next實現也很簡潔。一個遞歸調用順序尋找中間件。不斷的調用next。代碼相當簡單但是思路卻很值得學習。

        其中 done 是第三方處理方法。其他處理sub app以及路由的部分都刪除了。不是重點

        koa

        koa將next的實現抽離成了一個單獨的包,代碼更加簡單,但是實現了一個貌似更加復雜的功能

        看著上面處理過的的代碼 有些同學可能還是會不明覺厲。

        那么我們繼續處理一下:

        這樣一來 程序更加簡單了 跟async/await也沒有任何關系了,讓我們看下結果好了

        執行上面的程序我們可以發現依次輸出:

        foo1
        bar1
        qux1
        qux2
        bar2
        foo2

        同樣是所謂koa的洋蔥模型,到這里我們就可以得出這樣一個結論:koa的中間件模型跟async或者generator并沒有實際聯系,只是koa強調async優先。所謂中間件暫停也只是回調函數的原因(在我看來promise.then與回調其實沒有什么區別,甚至async/await也是回調的一種形式)。

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

        文檔

        比較express與koa中間件模式的區別與聯系

        起因;最近在學習koa的使用,由于koa是相當基礎的web框架,所以一個完整的web應用所需要的東西大都以中間件的形式引入,比如koa-router.koa-view等。在koa的文檔里有提到:koa的中間件模式與express的是不一樣的,koa是洋蔥型,express是直線型,至于為什么這樣,網上很多文章并沒有具體分析。或者簡單的說是async/await的特性之類。先不說這種說法的對錯,對于我來說這種說法還是太模糊了。所以我決定通過源碼來分析二者中間件實現的原理以及用法的異同。為了簡單起見這里的express用connect代替(實現原理是一致的)。用法;二者都以官網(github)文檔為準。connect;下面是官網的用法。;
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 老司机精品视频免费| 亚洲精品综合一二三区在线| 精品亚洲456在线播放| 无人在线直播免费观看| 亚洲国产夜色在线观看| 美女视频黄免费亚洲| 亚洲中文字幕久久精品蜜桃| 免费观看的毛片手机视频| 亚洲av无码专区在线电影天堂| 国产精品无码一二区免费| 有色视频在线观看免费高清在线直播| 亚洲av午夜精品一区二区三区| 又黄又大的激情视频在线观看免费视频社区在线 | MM1313亚洲国产精品| 亚洲成a人无码av波多野按摩| 四虎精品免费永久免费视频| 亚洲中文字幕日产乱码高清app | 77777亚洲午夜久久多喷| 国产在线观看免费视频播放器 | 免费激情网站国产高清第一页| 亚洲国产黄在线观看| 久久久精品免费国产四虎| 亚洲第一成年人网站| 妞干网免费视频观看| 色视频在线观看免费| 亚洲精品卡2卡3卡4卡5卡区| 亚洲电影在线免费观看| 国产亚洲人成在线播放| 亚洲乱码国产乱码精品精| 亚洲免费视频网址| 精品特级一级毛片免费观看| 亚洲人成人无码网www电影首页| 亚洲一级毛片免费看| 大桥未久亚洲无av码在线| 亚洲av女电影网| 日韩一区二区三区免费体验| 青柠影视在线观看免费高清| 亚洲一区二区三区写真| 亚洲精品成人片在线观看精品字幕| 老司机在线免费视频| 国产V片在线播放免费无码|