中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

express與koa的區別是什么-創新互聯

express與koa的區別是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

專注于為中小企業提供成都網站設計、成都做網站、外貿網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業會同免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了上千家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

connect的執行流程
通常我們都說connect的中間件模型是線性的, 也就是一個一個往下執行的, 如下圖:

express與koa的區別是什么

這么說當然是沒錯的, 但是當我們執行下面代碼的時候可能會有那么一點小小的困惑:

const connect = require('connect')
const app = connect()
app.use(function m1 (req, res, next) {
 console.log('m1')
 next()
 console.log('m1 end')
})
app.use(function m2 (req, res, next) {
 console.log('m2')
 next()
 console.log('m2 end')
})
app.use(function m3 (req, res, next) {
 console.log('m3')
 res.end('hello')
})
app.listen(8080)

當我們訪問http://127.0.0.1:8080的時候, 控制臺會打印如下:

m1
m2
m3
m2 end
m1 end

這么個結果跟我們上面的模型似乎有點出入, 不是說線性的嗎, 為什么next后面的代碼還會繼續執行? 當然這個我們再之前已經有過結論了, 有興趣的可以詳細瞧瞧, 我們現在直接拿來結果, connect的中間件模型偽代碼表示如下:

http.createServer(function (req, res) {
 m1 (req, res) {
 m2 (req, res) {
 m3 (req, res) {}
 }
 }
})

可以看到就是一層一層嵌套的回調, 那么再把我們之前有點疑問的代碼簡化一下:

http.createServer(function (req, res) {
 console.log('m1')
 m1 (req, res) {
 console.log('m2')
 m2 (req, res) {
 m3 (req, res) {
 console.log('m3')
 res.end('hello')
 }
 }
 console.log('m2 end')
 }
 console.log('m1 end')
})

千萬別被上面的回調繞暈了, 就是很簡單的回調函數, 一切都解釋的通了: 即使res.end之后, 我們的代碼還是要繼續往下走的, 可以這么說connect的中間件其實也是洋蔥形的, 但是因為作為同步代碼, 一般不回這么做罷了, 那么上面我們可以重現描述一下connect的中間件模型了:

express與koa的區別是什么

Koa的執行流程

同樣我們再Koa源碼分析, 也是說過Koa的中間件模型: 洋蔥形

express與koa的區別是什么

以下面代碼為例:

const Koa = require('koa')
const app = new Koa()
app.use(async function m1 (ctx, next) {
 console.log('m1')
 await next()
 console.log('m1 end')
})
app.use(async function m2 (ctx, next) {
 console.log('m2')
 await next()
 console.log('m2 end')
})
app.use(async function m3 (ctx) {
 console.log('m3')
 ctx.body = 'hello'
})
app.listen(8080)

訪問服務, 輸出:

m1
m2
m3
m2 end
m1 end

emm 貌似跟connect沒差別, 之前看過一篇文章, 實驗到這里得到了一個koa和express的中間件模型沒差別的結論, 包括我也是很迷惑, 當然是有差別的, 結論后面講. 同樣這里直接拿出koa中間件的簡化模型:

Promise.resolve(async m1 () {
 console.log(m1)
 await Promise.resolve(async m2 () {
 console.log(m2)
 await Promise.resolve(async m3 () {
 console.log(m3)
 ctx.body = 'xxx'
 })
 console.log(m2 end)
 })
 console.log(m1 end)
})

我們知道async/await的作用是'同步化'異步操作(看上去如此, 其實不是, 但是我們不需要去管), 那這里的Promise理所當然的被'同步'了, 也就是說console.log(m3 end)的一切異步操作都可以'同步化'.

結論

說出結論之前我們其實可以想一下, 既然connect的中間件也是洋蔥形的, 那么跟koa一樣的用法似乎也沒啥毛病, 那么我來設想一下, 我們的服務需要取數據庫里的的一個用戶假設是getUser吧, getUser當然是異步的. 分別來看看connect和koa的做法吧:

// connect
app.use(function (req, res) {
 getUser(user => res.end(user))
})
// Koa
app.use(async (ctx) => {
 const user = await getUser()
 ctx.body = user
})

關于express與koa的區別是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯成都網站設計公司行業資訊頻道了解更多相關知識。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

標題名稱:express與koa的區別是什么-創新互聯
標題路徑:http://m.2m8n56k.cn/article24/dipice.html

成都網站建設公司_創新互聯,為您提供App開發、App設計、動態網站、用戶體驗、網頁設計公司微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 99精品在线观看视频 | 免费国产成人午夜在线观看 | 国产日产亚洲精品 | 国产国语对白一级毛片 | 成人久久伊人精品伊人 | 在线观看亚洲精品专区 | 久久久精品久久视频只有精品 | 国内国外精品一区二区 | 国产美女一区二区在线观看 | 男女午夜性爽快免费视频不卡 | 黑人边吃奶边扎下面激情视频 | 国产成人欧美视频在线 | 亚洲二区在线播放 | 成人精品在线视频 | 台湾一级特黄精品大片 | 欧美三级在线看 | 免费狼人久久香蕉网 | 美女视频很黄很a免费国产 美女视频黄.免费网址 | 国内精品久久久久久影院老狼 | 九九视频在线观看6 | 黑人一级黄色片 | 欧美videos另类齐全 | 视频一区二区在线 | 黄色三级视频网站 | 国产黄色激情视频 | 欧美在线区 | 香港激情三级做爰小说 | 久久久亚洲精品蜜桃臀 | 日本免费小视频 | 黄色三级网络 | 999久久久精品视频在线观看 | 免费在线观看a | 国产精品久久永久免费 | 久久精品亚洲一级毛片 | 香蕉视频911 | 久草免费福利 | 欧美成人黄色 | 日本三级香港三级人妇99 | 91久久精品国产91性色tv | 国产精品久久久久久久久福利 | 国产欧美一区二区三区在线看 |