国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Express 文檔(路由)

VPointer / 2473人閱讀

摘要:這些路由方法指定當(dāng)應(yīng)用程序收到對(duì)指定路由端點(diǎn)和方法的請(qǐng)求時(shí)調(diào)用的回調(diào)函數(shù)有時(shí)稱為處理函數(shù),換句話說(shuō),應(yīng)用程序監(jiān)聽與指定路由和方法匹配的請(qǐng)求,并且當(dāng)它檢測(cè)到匹配時(shí),它調(diào)用指定的回調(diào)函數(shù)。

路由

路由是指應(yīng)用程序的端點(diǎn)(URI)如何響應(yīng)客戶端請(qǐng)求,有關(guān)路由的介紹,請(qǐng)參閱路由基礎(chǔ)。

使用與HTTP方法相對(duì)應(yīng)的Express app對(duì)象的方法定義路由,例如,app.get()用于處理GET請(qǐng)求,app.post()用于處理POST請(qǐng)求,有關(guān)完整列表,請(qǐng)參閱app.METHOD。你還可以使用app.all()來(lái)處理所有HTTP方法,并使用app.use()將中間件指定為回調(diào)函數(shù)(有關(guān)詳細(xì)信息,請(qǐng)參閱使用中間件)。

這些路由方法指定當(dāng)應(yīng)用程序收到對(duì)指定路由(端點(diǎn))和HTTP方法的請(qǐng)求時(shí)調(diào)用的回調(diào)函數(shù)(有時(shí)稱為“處理函數(shù)”),換句話說(shuō),應(yīng)用程序“監(jiān)聽”與指定路由和方法匹配的請(qǐng)求,并且當(dāng)它檢測(cè)到匹配時(shí),它調(diào)用指定的回調(diào)函數(shù)。

實(shí)際上,路由方法可以有多個(gè)回調(diào)函數(shù)作為參數(shù),使用多個(gè)回調(diào)函數(shù)時(shí),重要的是提供next作為回調(diào)函數(shù)的參數(shù),然后在函數(shù)體內(nèi)調(diào)用next()以將控制權(quán)交給下一個(gè)回調(diào)。

以下代碼是一個(gè)非常基礎(chǔ)的路由示例。

var express = require("express")
var app = express()

// respond with "hello world" when a GET request is made to the homepage
app.get("/", function (req, res) {
  res.send("hello world")
})
路由方法

路由方法是從其中一個(gè)HTTP方法派生的,并附加到express類的實(shí)例。

以下代碼是為應(yīng)用程序根目錄的GET和POST方法定義的路由示例。

// GET method route
app.get("/", function (req, res) {
  res.send("GET request to the homepage")
})

// POST method route
app.post("/", function (req, res) {
  res.send("POST request to the homepage")
})

Express支持與所有HTTP請(qǐng)求方法相對(duì)應(yīng)的方法:getpost等,有關(guān)完整列表,請(qǐng)參閱app.METHOD

有一種特殊的路由方法app.all(),用于在路徑上為所有HTTP請(qǐng)求方法加載中間件函數(shù),例如,無(wú)論是使用GET、POST、PUT、DELETE還是http模塊支持的任何其他HTTP請(qǐng)求方法,都會(huì)對(duì)路由“/secret”的請(qǐng)求執(zhí)行以下處理程序。

app.all("/secret", function (req, res, next) {
  console.log("Accessing the secret section ...")
  next() // pass control to the next handler
})
路由路徑

路由路徑與請(qǐng)求方法結(jié)合,定義可以發(fā)出請(qǐng)求的端點(diǎn),路由路徑可以是字符串、字符串模式或正則表達(dá)式。

字符?+*()是它們的正則表達(dá)式對(duì)應(yīng)物的子集,連字符(-)和點(diǎn)(.)由字符串路徑按字面解釋。

如果你需要在路徑字符串中使用美元字符($),請(qǐng)將其包含在([])中,例如,“/data/$book”處的請(qǐng)求的路徑字符串將是“/data/([$])book”

Express使用path-to-regexp來(lái)匹配路由路徑,有關(guān)定義路由路徑的所有可能性,請(qǐng)參閱path-to-regexp文檔,Express Route Tester是一個(gè)用于測(cè)試基本Express路由的便捷工具,但它不支持模式匹配。

查詢字符串不是路由路徑的一部分。

以下是基于字符串的路由路徑的一些示例。

此路由路徑將匹配對(duì)根路由/的請(qǐng)求。

app.get("/", function (req, res) {
  res.send("root")
})

此路由路徑將匹配/about的請(qǐng)求。

app.get("/about", function (req, res) {
  res.send("about")
})

此路由路徑將匹配對(duì)/random.text的請(qǐng)求。

app.get("/random.text", function (req, res) {
  res.send("random.text")
})

以下是基于字符串模式的路由路徑的一些示例。

此路由路徑將匹配acdabcd

app.get("/ab?cd", function (req, res) {
  res.send("ab?cd")
})

此路由路徑將匹配abcdabbcdabbbcd等。

app.get("/ab+cd", function (req, res) {
  res.send("ab+cd")
})

此路由路徑將匹配abcdabxcdabRANDOMcdab123cd等。

app.get("/ab*cd", function (req, res) {
  res.send("ab*cd")
})

此路由路徑將匹配/abe/abcde

app.get("/ab(cd)?e", function (req, res) {
  res.send("ab(cd)?e")
})

基于正則表達(dá)式的路由路徑示例:

此路由路徑將匹配其中包含“a”的任何內(nèi)容。

app.get(/a/, function (req, res) {
  res.send("/a/")
})

這個(gè)路由路徑將與butterflydragonfly相匹配,但不會(huì)與butterflymandragonflyman等相匹配。

app.get(/.*fly$/, function (req, res) {
  res.send("/.*fly$/")
})
路由參數(shù)

路由參數(shù)是命名的URL片段,用于捕獲在URL中的位置指定的值,捕獲的值填充在req.params對(duì)象中,在路徑中指定的路由參數(shù)的名稱作為其各自的鍵。

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ù)的名稱必須由“單詞字符”([A-Za-z0-9_])組成。

由于連字符(-)和點(diǎn)(.)按字面解釋,因此它們可以與路由參數(shù)一起使用以用于有用的目的。

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" }

要更好地控制路由參數(shù)可以匹配的確切字符串,可以在括號(hào)(())中附加正則表達(dá)式:

Route path: /user/:userId(d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}
因?yàn)檎齽t表達(dá)式通常是文字字符串的一部分,所以請(qǐng)務(wù)必使用額外的反斜杠轉(zhuǎn)義任何字符,例如d+

在Express 4.x中,正則表達(dá)式中的*字符不以通常的方式解釋,要解決此問(wèn)題,請(qǐng)使用{0,}而不是*,這可能會(huì)在Express 5中修復(fù)。

路由處理程序

你可以提供多個(gè)回調(diào)函數(shù),其行為類似于中間件來(lái)處理請(qǐng)求,唯一的例外是這些回調(diào)可能會(huì)調(diào)用next("route")來(lái)繞過(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ù)可以處理路由,例如:

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])

多帶帶函數(shù)和函數(shù)數(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)方法

下表中的響應(yīng)對(duì)象(res)上的方法可以向客戶端發(fā)送響應(yīng),并終止請(qǐng)求—響應(yīng)周期,如果沒(méi)有從路由處理程序調(diào)用這些方法,則客戶端請(qǐng)求將保持掛起狀態(tài)。

方法 描述
res.download() 提示下載文件
res.end() 結(jié)束響應(yīng)過(guò)程
res.json() 發(fā)送JSON響應(yīng)
res.jsonp() 使用JSONP支持發(fā)送JSON響應(yīng)
res.redirect() 重定向請(qǐng)求
res.render() 渲染視圖模板
res.send() 發(fā)送各種類型的響應(yīng)
res.sendFile() 將文件作為八位字節(jié)流發(fā)送
res.sendStatus() 設(shè)置響應(yīng)狀態(tài)碼并將其字符串表示形式作為響應(yīng)體發(fā)送
app.route()

你可以使用app.route()為路由路徑創(chuàng)建可鏈接的路由處理程序,由于路徑是在單個(gè)位置指定的,因此創(chuàng)建模塊化路由很有幫助,同時(shí)減少冗余和拼寫錯(cuò)誤,有關(guān)路由的更多信息,請(qǐng)參閱:Router()文檔。

以下是使用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")
  })
express.Router

使用express.Router類創(chuàng)建模塊化、可裝載的路由處理程序,Router實(shí)例是一個(gè)完整的中間件和路由系統(tǒng),因此,它通常被稱為“迷你應(yīng)用程序”。

以下示例將路由器創(chuàng)建為模塊,在其中加載中間件功能,定義一些路由,并將路由器模塊裝載在主應(yīng)用程序中的路徑上。

在應(yīng)用程序目錄中創(chuàng)建名為birds.js的路由器文件,其中包含以下內(nèi)容:

var express = require("express")
var router = express.Router()

// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
  console.log("Time: ", Date.now())
  next()
})
// define the home page route
router.get("/", function (req, res) {
  res.send("Birds home page")
})
// define the about route
router.get("/about", function (req, res) {
  res.send("About birds")
})

module.exports = router

然后,在應(yīng)用程序中加載路由器模塊:

var birds = require("./birds")

// ...

app.use("/birds", birds)

該應(yīng)用程序現(xiàn)在能夠處理對(duì)/birds/birds/about的請(qǐng)求,以及調(diào)用特定于該路由的timeLog中間件函數(shù)。

上一篇:常見問(wèn)題 下一篇:編寫中間件

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/100459.html

相關(guān)文章

  • Express 文檔(常見問(wèn)題)

    摘要:常見問(wèn)題我該如何構(gòu)建我的應(yīng)用程序這個(gè)問(wèn)題沒(méi)有明確的答案,答案取決于你的應(yīng)用程序規(guī)模和所涉及的團(tuán)隊(duì),為了盡可能靈活,在結(jié)構(gòu)方面沒(méi)有做出任何假設(shè)。請(qǐng)參閱,了解以模型為中心的基于的框架。 常見問(wèn)題 我該如何構(gòu)建我的應(yīng)用程序? 這個(gè)問(wèn)題沒(méi)有明確的答案,答案取決于你的應(yīng)用程序規(guī)模和所涉及的團(tuán)隊(duì),為了盡可能靈活,Express在結(jié)構(gòu)方面沒(méi)有做出任何假設(shè)。 在你喜歡的任何目錄結(jié)構(gòu)中,路由和其他特定于...

    MyFaith 評(píng)論0 收藏0
  • Express 文檔路由基礎(chǔ))

    摘要:路由基礎(chǔ)路由是指確定應(yīng)用程序如何響應(yīng)對(duì)特定端點(diǎn)的客戶端請(qǐng)求,該請(qǐng)求是或路徑和特定請(qǐng)求方法,等。路由定義采用以下結(jié)構(gòu)是的一個(gè)實(shí)例。是匹配到路由時(shí)執(zhí)行的函數(shù)。 路由基礎(chǔ) 路由是指確定應(yīng)用程序如何響應(yīng)對(duì)特定端點(diǎn)的客戶端請(qǐng)求,該請(qǐng)求是URI(或路徑)和特定HTTP請(qǐng)求方法(GET,POST等)。 每個(gè)路由都可以有一個(gè)或多個(gè)處理函數(shù),這些函數(shù)在路由匹配時(shí)執(zhí)行。 路由定義采用以下結(jié)構(gòu): app.M...

    hlcfan 評(píng)論0 收藏0
  • Express 文檔(使用中間件)

    摘要:調(diào)用堆棧中的下一個(gè)中間件函數(shù)。此示例顯示了一個(gè)中間件子堆棧,它處理對(duì)路徑的請(qǐng)求。要從路由器中間件堆棧跳過(guò)其余的中間件函數(shù),請(qǐng)調(diào)用將控制權(quán)傳遞給下一個(gè)路由,注意僅適用于使用或函數(shù)加載的中間件函數(shù)。 使用中間件 Express是一個(gè)路由和中間件Web框架,其本身的功能非常小:Express應(yīng)用程序本質(zhì)上是一系列中間件函數(shù)調(diào)用。 中間件函數(shù)是可以訪問(wèn)請(qǐng)求對(duì)象(req)、響應(yīng)對(duì)象(res)以及...

    lieeps 評(píng)論0 收藏0
  • Express 介紹

    摘要:在向頁(yè)面發(fā)送內(nèi)容時(shí),程序也不會(huì)往下執(zhí)行我們也可以裝在一組中間件路由級(jí)中間件路由級(jí)中間件和應(yīng)用級(jí)中間件一樣,只是它綁定的對(duì)象為。安裝所需功能的模塊,并在應(yīng)用中加載,可以在應(yīng)用級(jí)加載,也可以在路由級(jí)加載。 Express 框架 根據(jù)官方的介紹,Express 是一個(gè)基于 Node.js 平臺(tái)的極簡(jiǎn)、靈活的 web 應(yīng)用開發(fā)框架,可以輕松的創(chuàng)建各種 web 或者移動(dòng)端應(yīng)用 今天就來(lái)簡(jiǎn)單的了解...

    hot_pot_Leo 評(píng)論0 收藏0
  • Express 文檔(編寫中間件)

    摘要:編寫中間件中間件函數(shù)是可以訪問(wèn)請(qǐng)求對(duì)象響應(yīng)對(duì)象以及應(yīng)用程序請(qǐng)求響應(yīng)周期中的函數(shù)的函數(shù),函數(shù)是路由器中的一個(gè)函數(shù),當(dāng)被調(diào)用時(shí),它會(huì)在當(dāng)前中間件之后執(zhí)行中間件。結(jié)束請(qǐng)求響應(yīng)周期。此外,根路徑路由的回調(diào)函數(shù)使用中間件函數(shù)添加到請(qǐng)求對(duì)象的屬性。 編寫中間件 中間件函數(shù)是可以訪問(wèn)請(qǐng)求對(duì)象(req)、響應(yīng)對(duì)象(res)以及應(yīng)用程序請(qǐng)求—響應(yīng)周期中的next函數(shù)的函數(shù),next函數(shù)是Express路...

    nanchen2251 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<