Koa 中介軟體的原理及其應用

2022-09-14 06:03:10 字數 1567 閱讀 3504

koa 把很多 async 函式組成乙個處理鏈,每個 async 函式都可以做一些自己的事情,然後用await next()來呼叫下乙個 async 函式。我們把每個 async 函式稱為 middleware,這些 middleware 可以組合起來,完成很多有用的功能。koa 的中介軟體是通過 async/await 實現的,中介軟體執行順序是「洋蔥圈」模型,如圖:

原理:中介軟體之間通過 next 函式聯絡,當乙個中介軟體呼叫next()後,會將控制權交給下乙個中介軟體,直到下乙個中介軟體不再執行next()時沿路返回,依次將控制權交給上乙個中介軟體。 

這裡以三個中介軟體 m1.js、m2.js、m3.js 為例

$ cd project

$ mkdir middleware

$ cd middleware

$ touch m1.js

$ touch m2.js

$ touch m3.js

m1.js:

function m1 (ctx) 

module.exports =function ()

}

m2.js:

function m2 (ctx) 

module.exports =function ()

}

m3.js:

function m3 (ctx) 

module.exports =function ()

}

其中,引數 ctx 是由 koa 傳入的封裝了 request 和 response 的變數,我們可以通過它訪問 request 和 response,next 是 koa 傳入的將要處理的下乙個非同步函式。

const koa = require('

koa'

)koa()

const m1 = require('

./middleware/m1')

const m2 = require('

./middleware/m2')

const m3 = require('

./middleware/m3

')

輸出:

可用於登陸驗證的中介軟體:

logincheck.js:

module.exports = async (ctx, next) =>

//登陸失敗則禁止繼續執行,所以不需要執行 next()

ctx.body =

}

在刪除操作中使用 logincheck.js :

router.post('

/delete

', logincheck, async (ctx, next) =>

} else}})

更多 koa ctx:

koa中介軟體原理 之 手寫koa

早期沒有koa與expess之前,所有的請求響應只能在http.createserver中完成 返回請求狀態碼 res.end 返回根目錄頁面給瀏覽器 else if req.url about res.end 返回 about目錄頁面給瀏覽器 server.listen 3000,const ko...

koa 中介軟體

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

koa 中介軟體

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