漸進式Express原始碼學習3 初露鋒芒

2021-09-11 10:13:10 字數 1106 閱讀 7765

這是漸進式express原始碼學習 | 小白也能懂原始碼系列文章的第三篇。

請結合該節**閱讀lesson3-初露鋒芒

這篇文章我們在第二篇文章的基礎上,實現乙個稍微加強版的express,功能包括

具體的用法如下

先展示下目前的專案結構

和上篇文章不同的是,我們引入了route.js。目前原始檔總共有三個,express.js, router/layer.js, router/route.js

這篇中,我們實現的大概思路是每乙個layer對應乙個中介軟體,用route物件來儲存layer。當請求到來時,呼叫route的dispatch函式進行處理

上面的這個文字不理解沒關係,看完**就懂了,先看experss.js 和上篇文章相比,區別在兩個函式,乙個是init函式,乙個是handle函式

對比下上篇文章

前方高能,重點是dispatch函式,這個地方要理解準確,實現很巧妙

當請求到來時,觸發route.dispatch函式,在dispatch函式中(20-32行),我們看看他是怎麼做的。 首先他定義了乙個計數器idx,定義了乙個next函式。進入next之後,首先觸發fn1, 傳入的引數分別是req, res, next。注意最後這個next就是這個next函式。以我們自己的example做講解

req.user =

next()

})複製**

上面**中的next,其實就是dispatch的next函式。當我們在邏輯結尾呼叫next(), 其實也就是呼叫了dispatch中的next,從而idx 增加1 ,觸發下乙個layer的handle函式,直到我們不呼叫next(), 或者layer全部處理了

我們首先通過命令node example/index.js執行樣例 然後我們通過下面命令來測試我們的程式是否正常工作

複製**結果如圖

按我們的預期工作

本文實現了乙個加強的express,他能讓使用者在乙個路由新增多個中介軟體,同事引入了next引數。

漸進式Express原始碼學習2 道士下山

這是漸進式express原始碼學習 小白也能懂原始碼系列文章的第二篇。請結合該節 閱讀lesson2 道士下山 這篇文章我們在第一篇文章的基礎上,實現乙個稍微加強版的express,功能包括 具體的用法如下 我們用my express表示這個框架 const express require inde...

漸進式Express原始碼學習5 全副武裝

這是漸進式express原始碼學習 小白也能懂原始碼系列文章的第五篇。請結合該節 閱讀lesson5 全副武裝 這篇文章我們在第四篇文章的基礎上,實現乙個稍微加強版的express,功能包括 這篇文章要實現的express的期望用法如下 const express require index.js ...

漸進式Express原始碼學習5 全副武裝

這是漸進式express原始碼學習 小白也能懂原始碼系列文章的第五篇。請結合該節 閱讀lesson5 全副武裝 這篇文章我們在第四篇文章的基礎上,實現乙個稍微加強版的express,功能包括 這篇文章要實現的express的期望用法如下 const express require index.js ...