這是漸進式express原始碼學習 | 小白也能懂原始碼系列文章的第二篇。
請結合該節**閱讀lesson2-道士下山
這篇文章我們在第一篇文章的基礎上,實現乙個稍微加強版的express,功能包括
具體的用法如下(我們用my-express表示這個框架)
const express = require('../index.js')
// 處理get請求
res.end('you send get request')
})// 處理post請求
res.end('you send post request')
})// 處理put請求
res.end('you send put request')
})// 處理delete請求
res.end('you send delete request')
})複製**
先展示下目前的專案結構
也就直說,我們這篇文章要實現的express總共有兩個原始檔,乙個是express,乙個是router資料夾下的layer。
注意看下面的講解時要對照**,先上一下express.js的原始碼,然後一點點講解
首先看第33行到37行
再看6-12行
對比下上篇文章的**
和上之前不同的是,這次的入口函式中,我們不是直接返回使用者乙個資訊,而是呼叫自身的handle函式,那麼handle函式也許就是關鍵。handle函式在25-31行
很容易理解,在這裡,我們把handles裡面儲存的layer全部拿出來,然後進行遍歷呼叫。
layer封裝了這些處理函式,如下是layer的原始碼
每個layer儲存了乙個method,handle。他的handle_method函式來判斷這個請求的方法是不是和自己一致的,如果一致,就呼叫handel去處理,如果不一致,就直接返回
我們首先通過命令node example/index.js執行樣例 然後我們通過下面命令來測試我們的程式是否正常工作
複製**結果如圖
本文實現了乙個加強的express,他能讓使用者自定義處理方法還能分辨http請求方法。
漸進式Express原始碼學習3 初露鋒芒
這是漸進式express原始碼學習 小白也能懂原始碼系列文章的第三篇。請結合該節 閱讀lesson3 初露鋒芒 這篇文章我們在第二篇文章的基礎上,實現乙個稍微加強版的express,功能包括 具體的用法如下 先展示下目前的專案結構 和上篇文章不同的是,我們引入了route.js。目前原始檔總共有三個...
漸進式Express原始碼學習5 全副武裝
這是漸進式express原始碼學習 小白也能懂原始碼系列文章的第五篇。請結合該節 閱讀lesson5 全副武裝 這篇文章我們在第四篇文章的基礎上,實現乙個稍微加強版的express,功能包括 這篇文章要實現的express的期望用法如下 const express require index.js ...
漸進式Express原始碼學習5 全副武裝
這是漸進式express原始碼學習 小白也能懂原始碼系列文章的第五篇。請結合該節 閱讀lesson5 全副武裝 這篇文章我們在第四篇文章的基礎上,實現乙個稍微加強版的express,功能包括 這篇文章要實現的express的期望用法如下 const express require index.js ...