KOA中介軟體原始碼解析

2022-07-15 15:00:11 字數 1324 閱讀 2661

告別**噩夢,從這裡開始

請看下面來自官網的**和執行順序:

以上**的實現如果用**函式來實現,無疑是一場噩夢,而koa卻以十分優雅的方式實現了如下圖洋蔥圖一般的**:

核心是利用es6的新特性:generator

具體實現是利用koa的兩個niubi轟轟的模組:compose和cocompose模組,用於將所有generator中介軟體串聯起來,基本上就是將後乙個generator賦給前乙個generator的next引數。也就是在yield後面呼叫下乙個generate函式。

大致原理:

// 中介軟體 a

function* a(next)

// 中介軟體 b

function* b(next)

var next = function* (){};

var i = [a, b].length;

// 通過next首尾相連

while(i--)

// 包裹第乙個middleware

function* start(ne)

// 輸出

console.log(start(next).next());

console.log(start(next).next());

console.log(start(next).next());

console.log(start(next).next());

輸出結果:

➜ a-lab ./a

這裡可以看出來:compose取中介軟體是做i-迴圈的,但是由於一開始是吧中介軟體推入棧中,順序為filo,所有順序是沒問題的。

但是:那個負責把所有中介軟體串起來的next其實本身也是乙個generator,但是,如果在generater函式內部,呼叫另乙個generator函式,預設情況下是沒有效果的。

所以這時候就輪到我們的co模組出場啦

co模組:co模組便通過遞迴使得巢狀好的generate依次自動執行(包裝為promise物件)

大致原始碼實現

function run(gen) else 

function next() elseif (typeof g.next === 'function')

} next();

}

Koa 系列 Koa 中介軟體機制解析

koa 中介軟體採取的是中介軟體洋蔥模型,具體原理可見如何編寫屬於自己的 koa 中介軟體。本質就是將中介軟體巢狀執行 function middleware0 function middleware1 將兩個中介軟體巢狀執行 middleware0 middleware1 當然實際上更複雜,還要考...

koa 中介軟體

什麼是中介軟體 中介軟體是匹配路由之前或匹配路由完成做的一系列操作 中介軟體是乙個函式,它可以訪問請求物件和響應物件,和web應用中處理請求 響應迴圈流程 變數next,呼叫它,將控制權交給下乙個中介軟體函式 中介軟體的功能 koa中的幾種中介軟體 應用級中介軟體 路由級中介軟體 錯誤處理中介軟體 ...

koa 中介軟體

什麼是 koa 的中介軟體 通俗的講 中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以 把它叫做中介軟體。在express中介軟體 middleware 是乙個函式,它可以訪問請求物件 requestobject req 響應物件 responseobject res 和 web...