第十六天、Express路由

一、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,abbcdabbbcd等。

//至少有一個(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$/--此路由路徑將匹配butterflydragonfly,但不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í)和記錄

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 初始化 Node 項(xiàng)目流程 1、先創(chuàng)建一個(gè)目錄,然后定位到創(chuàng)建的目錄中 2、調(diào)用 npm init -y 來(lái)初始化...
    輪徊傷閱讀 670評(píng)論 0 0
  • 一、Express框架簡(jiǎn)介及體驗(yàn) 1.1 Express框架簡(jiǎn)介 Express是一個(gè)基于Node.js平臺(tái)的應(yīng)用...
    AizawaSayo閱讀 1,248評(píng)論 0 5
  • 1.Express框架 1.1 express是什么? 創(chuàng)建http服務(wù)器特別麻煩,express框架解決了這個(gè)的...
    這個(gè)前端不太冷閱讀 1,342評(píng)論 0 0
  • 原文在這里http://www.expressjs.com.cn/4x/api.html發(fā)現(xiàn)這不支持表格,表格內(nèi)容...
    忽如寄閱讀 7,106評(píng)論 1 14
  • express是一款簡(jiǎn)單的web開(kāi)發(fā)應(yīng)用框架,這里主要是一些主要api的使用方法和總結(jié)記錄。 中間件 首先,exp...
    islandsayi_9c8e閱讀 576評(píng)論 0 0

友情鏈接更多精彩內(nèi)容