1. 程式人生 > >關於Express路由,這篇總結的很全面

關於Express路由,這篇總結的很全面

通常我們在瀏覽器位址列中訪問一個頁面時,HTTP請求的URL格式是這樣的:

http://host[:port][path]

http:表示一種網路協議。

host:表示主機。

port:表示埠,可選欄位,不提供時預設為80。

path:指定請求資源的URI(統一資源識別符號),如果URL中沒有給出path,一般會預設成”/“(通常由瀏覽器或者其它HTTP客戶端完成補上)

然而,所謂路由,就是如何處理HTTP請求中的路徑部分

(比如“http://xxx.com/list/news”這個URL,路由將決定怎麼處理/list/news這個路徑)

app.get(‘/’,callback)

上面這個程式碼我們很熟悉了,表示我們添加了一條路由,指定”/“這個路徑由get的第二個引數所代表的函式callback來處理。

[下面開始講Express路由]

來看一下Express的路由定義規則:

app.verb(path,[callback...],callback)

同樣,對這個定義公式的每個引數說明一下:

1、verb表示方法,可以是get、post、put、delete等,常用的當然就是前面兩個。

2、path表示路徑,可以是一個字串(String),也可以是一個正則表示式(Regex)。

3、callback表示路徑處理函式,裡面有個next方法,可以用next(),也可以用next('router'),下面我會用例項來說明它們的區別。

由上可見,關於verb只要知道url傳送的是get請求和表單可提交post請求資料就行,所以,本篇下面開始就從path和callback兩個點來介紹Express路由的幾乎所有使用規則。

一、路由中的路徑(path)

String:

路徑是字串的情況,舉三個例子:

1、匹配/list

在位址列中輸入:

http://localhost:1234/list

瀏覽器視窗輸出:

This is list

2、匹配/list/news

http://localhost:1234/list/news

This is news

3、匹配/list/news/123

http://localhost:1234/list/news/123

This is list news:123

Regex:

路徑是正則表示式的情況,舉兩個例子:

1、匹配/mobile/1[十個數字]

http://localhost:1234/mobile/1開頭11位數字

This is a mobile ......

2、匹配abcd和acd

http://localhost:1234/abcd

匹配abcd和acd

好了,這些並不難,在舉例子就是講正則表示式了,哈

二、路由中的控制代碼(callback)

有關路由中的控制代碼,這裡我講清楚兩個問題:

1、next()和next('route')

這兩個方法是路由反饋函式自帶的方法。

例項如下圖所示:

有三個位置加了next()或者next('route'),我們這裡只需要講清楚這兩者的區別,我們就只需要關注位置1,為了讓第二個相同路由執行,位置2可以是next(),也可以是next('router'),表示執行下一個相同路由。

通過測試,發現:

當位置1是next()時輸出的是:

1234

當位置1是next('router')時輸出的是:

134

由此可知,當位置1是next()方法時,會先執行下一個callback,當為next('router')時,會直接跳過下一個callback直接執行下一個相同路由。這也就是二者區別。

2、app.param()

app.param在路由中也相當於是一箇中間件的作用,具體看一下下面這個例項:

'listname'的param方法會在’listname‘路由get之前執行。這裡一定要強調listname,因為引數是一一對應的。上面這個新例項將輸出:

list:item0item1item2

比如我們需要通過一個路由引數去取相應的資料,這個時候通常的做法是寫函式來處理,有了param方法後就可以將這些邏輯寫在這個方法裡了。

三、寫到最後總結

當然,Express路由還有一些其它的知識點,比如,app.all(""):能處理任意請求型別,再比如,利用app.route("").get().post().all()實現一個路徑處理多個請求方式。這些感覺不是很常用,沒有做專門的實現總結 ,感興趣的童靴可以自己寫個DEMO測一下。