一、Express路由簡(jiǎn)介
路由表示應(yīng)用程序端點(diǎn) (URI) 的定義以及響應(yīng)客戶端請(qǐng)求的方式。它包含一個(gè)請(qǐng)求方時(shí)(methods)、路徑(path)和路由匹配時(shí)的函數(shù)(callback);
app.methods(path, callback);
二、Express路由方法
Express方法源于 HTTP 方法之一,附加到 express 類(lèi)的實(shí)例。它可請(qǐng)求的方法包括:
get、post、put、head、delete、options、trace、copy、lock、mkcol、move、purge、propfind、proppatch、unlock、report、mkactivity、checkout、merge、m-search、notify、subscribe、unsubscribe、patch、search 和 connect。
三、路徑
Express路徑包含三種表達(dá)形式,分別為字符串、字符串模式、正則表達(dá)式
1.字符串路徑
app.get("/login",function(req,res){
res.send("login頁(yè)面");
})
2.字符串模式路徑
/ab?cd--此路由路徑將與acd和相匹配abcd。
app.get('/ab?cd', function (req, res) {
res.send('acd界面或者abcd界面')
})
/ab+cd--此路由路徑將會(huì)匹配abcd,abbcd,abbbcd等。
//至少有一個(gè)b,可以有很多個(gè)b
app.get('/ab+cd', function (req, res) {
res.send('abcd或abbcd或abbbcd等')
})
/ab*cd--此路由路徑將會(huì)匹配abcd,abxcd,abRANDOMcd,ab123cd等。
//以ab開(kāi)頭,中間任意內(nèi)容,然后cd結(jié)尾
app.get('/ab*cd', function (req, res) {
res.send('abcd或abxcd等')
})
/ab(cd)?e--此路由路徑將與/abe和相匹配/abcde。
//cd可有可無(wú)
app.get('/ab(cd)?e', function (req, res) {
res.send('abe或者abcde')
})
3.正則表達(dá)式路徑
/a/--此路由路徑將匹配其中帶有“ a”的任何內(nèi)容。
app.get(/a/, function (req, res) {
res.send('/a/')
})
/.*fly$/--此路由路徑將匹配butterfly和dragonfly,但不butterflyman,dragonflyman等。
app.get(/.*fly$/, function (req, res) {
res.send('/.*fly$/')
})
四、動(dòng)態(tài)路由
路線參數(shù)
路由參數(shù)被命名為URL段,用于捕獲URL中在其位置處指定的值。捕獲的值將填充到req.params對(duì)象中,并將路徑中指定的route參數(shù)的名稱(chēng)作為其各自的鍵。
Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }
要使用路由參數(shù)定義路由,只需在路由路徑中指定路由參數(shù),如下所示。
app.get('/users/:userId/books/:bookId', function (req, res) {
res.send(req.params)
})
路徑參數(shù)的名稱(chēng)必須由“文字字符”([A-Za-z0-9_])組成。
由于連字符(-)和點(diǎn)(.)是按字面解釋的,因此可以將它們與路由參數(shù)一起使用,以實(shí)現(xiàn)有用的目的。
Route path: /flights/:from-:to
Request URL: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" }
Route path: /plantae/:genus.:species
Request URL: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" }
要更好地控制可以由route參數(shù)匹配的確切字符串,可以在括號(hào)(())后面附加一個(gè)正則表達(dá)式:
Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}
由于正則表達(dá)式通常是文字字符串的一部分,因此請(qǐng)確保``使用其他反斜杠對(duì)所有字符進(jìn)行轉(zhuǎn)義,例如\d+。
路線處理程序
您可以提供行為類(lèi)似于中間件的多個(gè)回調(diào)函數(shù)來(lái)處理請(qǐng)求。唯一的例外是這些回調(diào)可能會(huì)調(diào)用next('route')以繞過(guò)其余的路由回調(diào)。您可以使用此機(jī)制在路由上施加先決條件,然后在沒(méi)有理由繼續(xù)使用當(dāng)前路由的情況下將控制權(quán)傳遞給后續(xù)路由。
路由處理程序可以采用函數(shù),函數(shù)數(shù)組或二者組合的形式,如以下示例所示。
單個(gè)回調(diào)函數(shù)可以處理路由。例如:
app.get('/example/a', function (req, res) {
res.send('Hello from A!')
})
多個(gè)回調(diào)函數(shù)可以處理一條路由(確保指定了next對(duì)象)。例如:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
回調(diào)函數(shù)數(shù)組可以處理路由。例如:
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}
var cb1 = function (req, res, next) {
console.log('CB1')
next()
}
var cb2 = function (req, res) {
res.send('Hello from C!')
}
app.get('/example/c', [cb0, cb1, cb2])
獨(dú)立功能和功能數(shù)組的組合可以處理路由。例如:
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}
var cb1 = function (req, res, next) {
console.log('CB1')
next()
}
app.get('/example/d', [cb0, cb1], function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from D!')
})
應(yīng)對(duì)方法
res下表中響應(yīng)對(duì)象()上的方法可以將響應(yīng)發(fā)送到客戶端,并終止請(qǐng)求-響應(yīng)周期。如果從路由處理程序中未調(diào)用這些方法,則客戶端請(qǐng)求將被掛起。
| 方法 | 描述 |
|---|---|
| res.download() | 提示要下載的文件。 |
| res.end() | 結(jié)束響應(yīng)過(guò)程。 |
| res.json() | 發(fā)送JSON響應(yīng)。 |
| res.jsonp() | 發(fā)送帶有JSONP支持的JSON響應(yīng)。 |
| res.redirect() | 重定向請(qǐng)求。 |
| res.render() | 渲染視圖模板。 |
| res.send() | 發(fā)送各種類(lèi)型的響應(yīng)。 |
| res.sendFile() | 將文件作為八位字節(jié)流發(fā)送。 |
| res.sendStatus() | 設(shè)置響應(yīng)狀態(tài)代碼,并將其字符串表示形式發(fā)送為響應(yīng)正文。 |
app.route()
您可以使用來(lái)為路由路徑創(chuàng)建可鏈接的路由處理程序app.route()。由于路徑是在單個(gè)位置指定的,因此創(chuàng)建模塊化路由非常有幫助,減少冗余和錯(cuò)別字也很有幫助。有關(guān)路由的更多信息,請(qǐng)參見(jiàn):Router()文檔。
這是使用定義的鏈?zhǔn)铰酚商幚沓绦虻氖纠?code>app.route()。
app.route('/book')
.get(function (req, res) {
res.send('Get a random book')
})
.post(function (req, res) {
res.send('Add a book')
})
.put(function (req, res) {
res.send('Update the book')
})
還是挺簡(jiǎn)單有趣的學(xué)習(xí)??!
日期:2021/12/1
學(xué)習(xí)參考視頻:*https://www.bilibili.com/video/BV1i7411G7kW?p=42&t=2296.7
學(xué)習(xí)參考文檔參考部分相關(guān)視頻文案和課件,僅供個(gè)人學(xué)習(xí)和記錄