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

2021-09-12 21:56:29 字數 1616 閱讀 7614

koa 中介軟體採取的是中介軟體洋蔥模型,具體原理可見如何編寫屬於自己的 koa 中介軟體。本質就是將中介軟體巢狀執行:

function middleware0()

function middleware1()

// 將兩個中介軟體巢狀執行

middleware0(middleware1())

當然實際上更複雜,還要考慮中介軟體的非同步執行和中介軟體如何進行巢狀。koa 中非同步處理在 koa1 中使用的是 generator + co.js,在 koa2 中使用的是 async/await,我們本次採用 async/await 來處理非同步。中介軟體的巢狀可以通過將中介軟體當引數傳遞來實現巢狀。據此我們對上面的**進行進一步加工:

ps:node7.6+ 支援 async/await
async function middleware0(next)

async function middleware1(next)

// 將兩個中介軟體巢狀執行

middleware0(middleware1)

koa 中通過 compose 函式對中介軟體的進行處理。compose 函式引數為 middleware 的陣列, middleware 陣列成員是通過 use 方法新增的中介軟體。下面寫個簡單的 compose 函式,來實現多個中介軟體的處理:

async function middleware0(next)

async function middleware1(next)

async function middleware2(next)

/** * @param 中介軟體陣列

*/function compose (middleware)

}// 執行

compose([middleware0, middleware1, middleware2])

我們已經簡單實現了乙個 compose 函式,現在來看下 koa 中原始碼的實現。koa 中的 compose 函式已經提取到 koa-compose 包中,其中的核心**如下:

/**

* @param 中介軟體陣列

* @return

*/function compose (middleware)

/*** 此處先不執行中介軟體,直接返回函式

* 統一在外面進行異常判斷,再開始執行中介軟體

*/return function (context, next) catch (err)

}}}

通過解析可以發現,原始碼相對於我們的實現更加健全:

/**

* fnmiddleware(ctx) 就是 compose 函式返回的函式,預設不傳入 next 引數

* promise 保證中介軟體,handleresponse 執行順序。

*/fnmiddleware(ctx).then(handleresponse).catch(onerror)

從最開始的編寫 koa 中介軟體,到現在閱讀 compose 函式原始碼,koa 中介軟體機制並不複雜,了解之後,我們可以運用、編寫更合適的中介軟體,構建自己的 koa 應用。

koa 中介軟體

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

koa 中介軟體

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

koa 中介軟體

中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以把它叫做中介軟體。在express 中介軟體 middleware 是乙個函式,它可以訪問請求物件 request object req 響應物件 response object res 和web 應用中處理請求 響應迴圈流程中的中...