中間件(Middleware)是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類軟件,它使用系統(tǒng)軟件所提供的基礎(chǔ)服務(wù)(功能),銜接網(wǎng)絡(luò)上應(yīng)用系統(tǒng)的各個(gè)部分或不同的應(yīng)用,能夠達(dá)到資源共享、功能共享的目的
在NodeJS中,中間件主要是指封裝http請(qǐng)求細(xì)節(jié)處理的方法
例如在express、koa等web框架中,中間件的本質(zhì)為一個(gè)回調(diào)函數(shù),參數(shù)包含請(qǐng)求對(duì)象、響應(yīng)對(duì)象和執(zhí)行下一個(gè)中間件的函數(shù)
在這些中間件函數(shù)中,我們可以執(zhí)行業(yè)務(wù)邏輯代碼,修改請(qǐng)求和響應(yīng)對(duì)象、返回響應(yīng)數(shù)據(jù)等操作
封裝
koa是基于NodeJS當(dāng)前比較流行的web框架,本身支持的功能并不多,功能都可以通過(guò)中間件拓展實(shí)現(xiàn)。通過(guò)添加不同的中間件,實(shí)現(xiàn)不同的需求,從而構(gòu)建一個(gè) Koa 應(yīng)用
Koa 中間件采用的是洋蔥圈模型,每次執(zhí)行下一個(gè)中間件傳入兩個(gè)參數(shù):
· ctx :封裝了request 和 response 的變量
· next :進(jìn)入下一個(gè)要執(zhí)行的中間件的函數(shù)
下面就針對(duì)koa進(jìn)行中間件的封裝:
Koa的中間件就是函數(shù),可以是async 函數(shù),或是普通函數(shù)
下面則通過(guò)中間件封裝http請(qǐng)求過(guò)程中幾個(gè)常用的功能:
· token校驗(yàn)
· 日志模塊
Koa存在很多第三方的中間件,如koa-bodyparser、koa-static等
下面再來(lái)看看它們的大體的簡(jiǎn)單實(shí)現(xiàn):
· koa-bodyparser
koa-bodyparser 中間件是將我們的 post 請(qǐng)求和表單提交的查詢字符串轉(zhuǎn)換成對(duì)象,并掛在 ctx.request.body 上,方便我們?cè)谄渌虚g件或接口處取值
· koa-static
koa-static 中間件的作用是在服務(wù)器接到請(qǐng)求時(shí),幫我們處理靜態(tài)文件
在實(shí)現(xiàn)中間件時(shí)候,單個(gè)中間件應(yīng)該足夠簡(jiǎn)單,職責(zé)單一,中間件的代碼編寫應(yīng)該高效,必要的時(shí)候通過(guò)緩存重復(fù)獲取數(shù)據(jù)
koa本身比較簡(jiǎn)潔,但是通過(guò)中間件的機(jī)制能夠?qū)崿F(xiàn)各種所需要的功能,使得web應(yīng)用具備良好的可拓展性和組合性
通過(guò)將公共邏輯的處理編寫在中間件中,可以不用在每一個(gè)接口回調(diào)中做相同的代碼編寫,減少了冗雜代碼,過(guò)程就如裝飾者模式





暫無(wú)評(píng)論,快來(lái)評(píng)論吧!