Express 的簡(jiǎn)單實(shí)現(xiàn)
首先 我們看看 express 是如何使用的

expres()? 返回了一個(gè)函數(shù),上面具有 get? 和 listen 方法。

? listen 是原生的 http.createServer 返回的方法


接下來(lái)處理 get 請(qǐng)求,這里先介紹一個(gè)概念:中間件
??中間件就是處理 HTTP 請(qǐng)求的 函數(shù),用來(lái)完成各種特定的任務(wù),比如 檢查用戶是否登錄、檢查用戶是否有權(quán)限訪問(wèn)等, 它的特點(diǎn)是:?
? ? ? ? 一個(gè)中間件處理完請(qǐng)求 和 響應(yīng)可以把相應(yīng)數(shù)據(jù)在傳遞給下一個(gè)中間件;
? ? ? ? 回調(diào)函數(shù)的 next 參數(shù),表示接受其他中間件的調(diào)用,函數(shù)體中的 next() 表示將請(qǐng)求數(shù)據(jù)繼續(xù)傳遞;
? ? ? ? 可以根據(jù)路徑來(lái)區(qū)分返回執(zhí)行不同的中間件。
? ? ? ? 中間件的路徑只要匹配前綴就可以了, 比如 /user, 可以匹配 /user/*
路由get、post這些東西,就是中間件,中間件講究順序,匹配上第一個(gè)之后,就不會(huì)往后匹配了。next函數(shù)才能夠繼續(xù)往后匹配。
????????app.use也是一個(gè)中間件,與get,post不同的是,它的網(wǎng)址不是精確匹配的
當(dāng)你不寫(xiě)路徑的時(shí)候,實(shí)際上就相當(dāng)于"/",就是所有網(wǎng)址
? ? 只能匹配一個(gè),要寫(xiě)next參數(shù),才會(huì)往下匹配

同理, 我們可以處理 post,use 等等 各種請(qǐng)求,這里還沒(méi)有涉及中間件的執(zhí)行 和 多個(gè) 請(qǐng)求的處理。




以上簡(jiǎn)單實(shí)現(xiàn)了一個(gè) express,很多方法 和 邏輯 都沒(méi)處理,粗略的了解下 express? 是如何 處理 中間件的。
需要注意的是: express 的中間件機(jī)制 和 koa 的不同, koa 采用的是洋蔥圈模型 ,而 express 中間件是 串行執(zhí)行的(后面會(huì)寫(xiě)一篇關(guān)于 express 中間件的)。