在node中,中間件是一種功能的封裝方式,主要是指封裝所有http請求細(xì)節(jié)處理的方法;http的請求通常包含了許多的內(nèi)容,因此可以利用中間件來簡化及隔離這些基礎(chǔ)設(shè)施與業(yè)務(wù)邏輯之間的細(xì)節(jié)。
本教程操作環(huán)境:windows10系統(tǒng)、nodejs 12.19.0版本、Dell G3電腦。
node的中間件是什么
nodejs中間件從概念上講是一種功能的封裝方式,主要是指封裝所有Http請求細(xì)節(jié)處理的方法。
在nodeJS中,中間件主要是指封裝所有Http請求細(xì)節(jié)處理的方法,一次Http請求通常包含很多工作:如記錄日志,IP過濾,查詢字符串、請求體解析,cookie處理、權(quán)限驗證、參數(shù)驗證、異常處理等、但對web應(yīng)用而言,并不希望接觸到這么多細(xì)節(jié)性的處理,因此使用中間件來簡化及隔離這些基礎(chǔ)設(shè)施與業(yè)務(wù)邏輯之間的細(xì)節(jié),讓開發(fā)者更關(guān)注在業(yè)務(wù)的開發(fā)上,他的工作模式如下:
中間件機(jī)制核心實現(xiàn)
中間件是從Http請求發(fā)起到響應(yīng)結(jié)束過程中的處理方法,通常需要對請求和響應(yīng)進(jìn)行處理,因此一個基本的中間件的形式如下:
const middleware = (req, res, next) => { // TODO next() } 模擬最基本的中間件 // 定義簡單的三個中間件 const httpMeth1 = (req, res, next) => { console.log('我是請求1') next() } const httpMeth2 = (req, res, next) => { console.log('我是請求2') next() } const httpMeth3 = (req, res, next) => { console.log('我是請求3') next() } // 中間件數(shù)組 const allHttpMeth = [httpMeth1, httpMeth2, httpMeth3] function run (req, res) { const next = () => { // 獲取中間件 const allHttpMethitem = allHttpMeth.shift() if (allHttpMethitem) { // 執(zhí)行 allHttpMethitem(req, res, next) } } next() } run() // 模擬請求發(fā)起
如果中間件中有異步操作,需要在異步操作的流程結(jié)束后再調(diào)用next()方法,否則中間件不能按順序執(zhí)行
推薦學(xué)習(xí):《nodejs視頻教程》