koa是由 Express 原班人馬打造的新的web框架。套用其官方的說(shuō)法:Koa 應(yīng)用是一個(gè)包含一系列中間件 generator 函數(shù)的對(duì)象。 這些中間件函數(shù)基于 request 請(qǐng)求以一個(gè)類(lèi)似于棧的結(jié)構(gòu)組成并依次執(zhí)行。
koa的中間件系統(tǒng)原理:
Koa的精妙之處就在于其基于promise的中間件系統(tǒng)的實(shí)現(xiàn),避免了免除重復(fù)繁瑣的回調(diào)函數(shù)嵌套。Koa的中間件是一系列g(shù)enerator函數(shù)的對(duì)象,執(zhí)行起來(lái)有點(diǎn)類(lèi)似于棧的結(jié)構(gòu),依次執(zhí)行。從網(wǎng)上找到一張圖可以比較形象的說(shuō)明koa的中間件是如何工作的:
每個(gè)中間件都是generator函數(shù),當(dāng)一個(gè)請(qǐng)求過(guò)來(lái)的時(shí)候,會(huì)依次經(jīng)過(guò)各個(gè)中間件進(jìn)行處理,當(dāng)遇到await next()時(shí),Koa 暫停了該中間件,執(zhí)行下一個(gè)中間件。直到某個(gè)中間件不調(diào)用下個(gè)中間件,即沒(méi)有處理await next()。則kao會(huì)逆序向上依次執(zhí)行被暫停的中間件的剩余部分邏輯。
代碼實(shí)例如下:
1 const Koa = require('koa'); 2 const app = new Koa(); 3 /** 4 * 請(qǐng)求依次進(jìn)入下面三個(gè)中間件 5 * */ 6 // x-response-time 7 app.use(async function (ctx, next) { 8 /** 9