国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

比較express與koa中間件模式的區(qū)別與聯(lián)系

來源:懂視網(wǎng) 責(zé)編:小OO 時(shí)間:2020-11-27 15:20:25
文檔

比較express與koa中間件模式的區(qū)別與聯(lián)系

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

起因

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

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

用法

二者都以官網(wǎng)(github)文檔為準(zhǔn)

connect

下面是官網(wǎng)的用法:

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

connect的中間件是線性的,next過后繼續(xù)尋找下一個(gè)中間件,這種模式直覺上也很好理解,中間件就是一系列數(shù)組,通過路由匹配來尋找相應(yīng)路由的處理方法也就是中間件。事實(shí)上connect也是這么實(shí)現(xiàn)的。

app.use 就是往中間件數(shù)組中塞入新的中間件。中間件的執(zhí)行則依靠私有方法 app.handle 進(jìn)行處理,express也是相同的道理。

koa

相對(duì)connect,koa的中間件模式就不那么直觀了,借用網(wǎng)上的圖表示:

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

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

源碼簡析

connect與koa中間件模式區(qū)別的核心就在于next的實(shí)現(xiàn),讓我們簡單看下二者next的實(shí)現(xiàn)。

connect

connect的源碼相當(dāng)少加上注釋也就200來行,看起來也很清楚,connect中間件處理在于proto.handle這個(gè)私有方法,同樣next也是在這里實(shí)現(xiàn)的

刪掉混淆的代碼后 我們可以看到next實(shí)現(xiàn)也很簡潔。一個(gè)遞歸調(diào)用順序?qū)ふ抑虚g件。不斷的調(diào)用next。代碼相當(dāng)簡單但是思路卻很值得學(xué)習(xí)。

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

koa

koa將next的實(shí)現(xiàn)抽離成了一個(gè)單獨(dú)的包,代碼更加簡單,但是實(shí)現(xiàn)了一個(gè)貌似更加復(fù)雜的功能

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

那么我們繼續(xù)處理一下:

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

執(zhí)行上面的程序我們可以發(fā)現(xiàn)依次輸出:

foo1
bar1
qux1
qux2
bar2
foo2

同樣是所謂koa的洋蔥模型,到這里我們就可以得出這樣一個(gè)結(jié)論:koa的中間件模型跟async或者generator并沒有實(shí)際聯(lián)系,只是koa強(qiáng)調(diào)async優(yōu)先。所謂中間件暫停也只是回調(diào)函數(shù)的原因(在我看來promise.then與回調(diào)其實(shí)沒有什么區(qū)別,甚至async/await也是回調(diào)的一種形式)。

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

文檔

比較express與koa中間件模式的區(qū)別與聯(lián)系

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产伦精品一区二区三区在线观看 | 亚洲色吧 | 欧美激情亚洲图片 | 亚洲国产成人精品一区二区三区 | 人人添人人澡人人澡人人人爽 | 在线观看亚洲一区二区 | 国产一区二三区 | 日韩有码电影 | 免费中国女人69xxxxx视频 | 久久99国产精品成人欧美 | 国产在线每日更新 | 国产日韩在线 | 欧美一道本| 欧美精品专区免费观看 | 国产高清自拍 | 国产精品久久久久久久毛片 | 亚洲黄色一区二区 | 亚洲 中文 欧美 日韩 在线人 | 一道精品视频一区二区三区男同 | 伊人久久91 | 看全色黄大色黄女片爽毛片 | 亚洲一区二区精品视频 | 国产91在线 | 日本 | 激情综合网激情 | 国产在线成人一区二区三区 | 国产精品久久亚洲一区二区 | 日韩视频高清 | 精品久久久久久综合日本 | 国产精品美女流白浆视频 | 91久娇草 | 亚洲色图在线播放 | 五月天婷婷在线观看 | 国产精品久久久久精 | 国产91在线 | 日本 | 欧洲高清一区二区三区试看 | 国产麻豆精品免费密入口 | 欧美一区二区在线视频 | 欧美视频免费在线观看 | 国产精品综合一区二区 | 日韩一区二区视频 | 亚洲日本韩国在线 |