koa 中介軟體採取的是中介軟體洋蔥模型,具體原理可見如何編寫屬於自己的 koa 中介軟體。本質就是將中介軟體巢狀執行:
當然實際上更複雜,還要考慮中介軟體的非同步執行和中介軟體如何進行巢狀。koa 中非同步處理在 koa1 中使用的是 generator + co.js,在 koa2 中使用的是 async/await,我們本次採用 async/await 來處理非同步。中介軟體的巢狀可以通過將中介軟體當引數傳遞來實現巢狀。據此我們對上面的**進行進一步加工:function middleware0()
function middleware1()
// 將兩個中介軟體巢狀執行
middleware0(middleware1())
ps:node7.6+ 支援 async/await
koa 中通過 compose 函式對中介軟體的進行處理。compose 函式引數為 middleware 的陣列, middleware 陣列成員是通過 use 方法新增的中介軟體。下面寫個簡單的 compose 函式,來實現多個中介軟體的處理:async function middleware0(next)
async function middleware1(next)
// 將兩個中介軟體巢狀執行
middleware0(middleware1)
我們已經簡單實現了乙個 compose 函式,現在來看下 koa 中原始碼的實現。koa 中的 compose 函式已經提取到 koa-compose 包中,其中的核心**如下:async function middleware0(next)
async function middleware1(next)
async function middleware2(next)
/** * @param 中介軟體陣列
*/function compose (middleware)
}// 執行
compose([middleware0, middleware1, middleware2])
通過解析可以發現,原始碼相對於我們的實現更加健全:/**
* @param 中介軟體陣列
* @return
*/function compose (middleware)
/*** 此處先不執行中介軟體,直接返回函式
* 統一在外面進行異常判斷,再開始執行中介軟體
*/return function (context, next) catch (err)
}}}
從最開始的編寫 koa 中介軟體,到現在閱讀 compose 函式原始碼,koa 中介軟體機制並不複雜,了解之後,我們可以運用、編寫更合適的中介軟體,構建自己的 koa 應用。/**
* fnmiddleware(ctx) 就是 compose 函式返回的函式,預設不傳入 next 引數
* promise 保證中介軟體,handleresponse 執行順序。
*/fnmiddleware(ctx).then(handleresponse).catch(onerror)
koa 中介軟體
什麼是中介軟體 中介軟體是匹配路由之前或匹配路由完成做的一系列操作 中介軟體是乙個函式,它可以訪問請求物件和響應物件,和web應用中處理請求 響應迴圈流程 變數next,呼叫它,將控制權交給下乙個中介軟體函式 中介軟體的功能 koa中的幾種中介軟體 應用級中介軟體 路由級中介軟體 錯誤處理中介軟體 ...
koa 中介軟體
什麼是 koa 的中介軟體 通俗的講 中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以 把它叫做中介軟體。在express中介軟體 middleware 是乙個函式,它可以訪問請求物件 requestobject req 響應物件 responseobject res 和 web...
koa 中介軟體
中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以把它叫做中介軟體。在express 中介軟體 middleware 是乙個函式,它可以訪問請求物件 request object req 響應物件 response object res 和web 應用中處理請求 響應迴圈流程中的中...