成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Express 文檔(使用中間件)

lieeps / 1147人閱讀

摘要:調(diào)用堆棧中的下一個(gè)中間件函數(shù)。此示例顯示了一個(gè)中間件子堆棧,它處理對(duì)路徑的請(qǐng)求。要從路由器中間件堆棧跳過(guò)其余的中間件函數(shù),請(qǐng)調(diào)用將控制權(quán)傳遞給下一個(gè)路由,注意僅適用于使用或函數(shù)加載的中間件函數(shù)。

使用中間件

Express是一個(gè)路由和中間件Web框架,其本身的功能非常?。篍xpress應(yīng)用程序本質(zhì)上是一系列中間件函數(shù)調(diào)用。

中間件函數(shù)是可以訪問(wèn)請(qǐng)求對(duì)象(req)、響應(yīng)對(duì)象(res)以及應(yīng)用程序請(qǐng)求—響應(yīng)周期中的下一個(gè)中間件函數(shù)的函數(shù),下一個(gè)中間件函數(shù)通常由名為next的變量表示。

中間件函數(shù)可以執(zhí)行以下任務(wù):

執(zhí)行任何代碼。

更改請(qǐng)求和響應(yīng)對(duì)象。

結(jié)束請(qǐng)求—響應(yīng)周期。

調(diào)用堆棧中的下一個(gè)中間件函數(shù)。

如果當(dāng)前的中間件函數(shù)沒(méi)有結(jié)束請(qǐng)求—響應(yīng)周期,它必須調(diào)用next()將控制權(quán)傳遞給下一個(gè)中間件函數(shù),否則,請(qǐng)求將被掛起。

Express應(yīng)用程序可以使用以下類型的中間件:

應(yīng)用程序級(jí)中間件

路由器級(jí)中間件

錯(cuò)誤處理中間件

內(nèi)置中間件

第三方中間件

你可以使用可選的裝載路徑加載應(yīng)用程序級(jí)和路由器級(jí)中間件,你還可以將一系列中間件函數(shù)加載在一起,從而在裝載點(diǎn)創(chuàng)建中間件系統(tǒng)的子堆棧。

應(yīng)用程序級(jí)中間件

使用app.use()app.METHOD()函數(shù)將應(yīng)用程序級(jí)中間件綁定到app對(duì)象的實(shí)例,其中METHOD是中間件函數(shù)處理的請(qǐng)求的小寫HTTP方法(例如GET,PUT或POST)。

此示例顯示了沒(méi)有裝載路徑的中間件函數(shù),每次應(yīng)用程序收到請(qǐng)求時(shí)都會(huì)執(zhí)行該函數(shù)。

var app = express()

app.use(function (req, res, next) {
  console.log("Time:", Date.now())
  next()
})

此示例顯示了安裝在/user/:id路徑上的中間件函數(shù),對(duì)/user/:id路徑上的任何類型的HTTP請(qǐng)求執(zhí)行該函數(shù)。

app.use("/user/:id", function (req, res, next) {
  console.log("Request Type:", req.method)
  next()
})

此示例顯示了路由及其處理函數(shù)(中間件系統(tǒng)),該函數(shù)處理對(duì)/user/:id路徑的GET請(qǐng)求。

app.get("/user/:id", function (req, res, next) {
  res.send("USER")
})

下面是一個(gè)使用掛載路徑在掛載點(diǎn)加載一系列中間件函數(shù)的示例,它說(shuō)明了一個(gè)中間件子堆棧,它將任何類型的HTTP請(qǐng)求的請(qǐng)求信息打印到/user/:id路徑。

app.use("/user/:id", function (req, res, next) {
  console.log("Request URL:", req.originalUrl)
  next()
}, function (req, res, next) {
  console.log("Request Type:", req.method)
  next()
})

路由處理程序使你可以為路徑定義多個(gè)路由,下面的示例為/user/:id路徑定義了兩個(gè)GET請(qǐng)求路由,第二個(gè)路由不會(huì)引起任何問(wèn)題,但它永遠(yuǎn)不會(huì)被調(diào)用,因?yàn)榈谝粋€(gè)路由結(jié)束了請(qǐng)求—響應(yīng)周期。

此示例顯示了一個(gè)中間件子堆棧,它處理對(duì)/user/:id路徑的GET請(qǐng)求。

app.get("/user/:id", function (req, res, next) {
  console.log("ID:", req.params.id)
  next()
}, function (req, res, next) {
  res.send("User Info")
})

// handler for the /user/:id path, which prints the user ID
app.get("/user/:id", function (req, res, next) {
  res.end(req.params.id)
})

要從路由器中間件堆棧跳過(guò)其余的中間件函數(shù),請(qǐng)調(diào)用next("route")將控制權(quán)傳遞給下一個(gè)路由,注意:next("route")僅適用于使用app.METHOD()router.METHOD()函數(shù)加載的中間件函數(shù)。

此示例顯示了一個(gè)中間件子堆棧,它處理對(duì)/user/:id路徑的GET請(qǐng)求。

app.get("/user/:id", function (req, res, next) {
  // if the user ID is 0, skip to the next route
  if (req.params.id === "0") next("route")
  // otherwise pass the control to the next middleware function in this stack
  else next()
}, function (req, res, next) {
  // send a regular response
  res.send("regular")
})

// handler for the /user/:id path, which sends a special response
app.get("/user/:id", function (req, res, next) {
  res.send("special")
})
路由器級(jí)中間件

路由器級(jí)中間件的工作方式與應(yīng)用程序級(jí)中間件的工作方式相同,只是它綁定到express.Router()的實(shí)例。

var router = express.Router()

使用router.use()router.METHOD()函數(shù)加載路由器級(jí)中間件。

以下示例代碼通過(guò)使用路由器級(jí)中間件復(fù)制上面顯示的應(yīng)用程序級(jí)中間件的中間件系統(tǒng):

var app = express()
var router = express.Router()

// a middleware function with no mount path. This code is executed for every request to the router
router.use(function (req, res, next) {
  console.log("Time:", Date.now())
  next()
})

// a middleware sub-stack shows request info for any type of HTTP request to the /user/:id path
router.use("/user/:id", function (req, res, next) {
  console.log("Request URL:", req.originalUrl)
  next()
}, function (req, res, next) {
  console.log("Request Type:", req.method)
  next()
})

// a middleware sub-stack that handles GET requests to the /user/:id path
router.get("/user/:id", function (req, res, next) {
  // if the user ID is 0, skip to the next router
  if (req.params.id === "0") next("route")
  // otherwise pass control to the next middleware function in this stack
  else next()
}, function (req, res, next) {
  // render a regular page
  res.render("regular")
})

// handler for the /user/:id path, which renders a special page
router.get("/user/:id", function (req, res, next) {
  console.log(req.params.id)
  res.render("special")
})

// mount the router on the app
app.use("/", router)

要跳過(guò)其余路由器中間件函數(shù),請(qǐng)調(diào)用next("router")將控制權(quán)交還出路由器實(shí)例。

此示例顯示了一個(gè)中間件子堆棧,它處理對(duì)/admin路徑的GET請(qǐng)求。

var app = express()
var router = express.Router()

// predicate the router with a check and bail out when needed
router.use(function (req, res, next) {
  if (!req.headers["x-auth"]) return next("router")
  next()
})

router.get("/", function (req, res) {
  res.send("hello, user!")
})

// use the router and 401 anything falling through
app.use("/admin", router, function (req, res) {
  res.sendStatus(401)
})
錯(cuò)誤處理中間件
錯(cuò)誤處理中間件總是需要四個(gè)參數(shù),你必須提供四個(gè)參數(shù)以將其標(biāo)識(shí)為錯(cuò)誤處理中間件函數(shù),即使你不需要使用next對(duì)象,也必須指定它以維護(hù)簽名,否則,next對(duì)象將被解釋為常規(guī)中間件,并且將無(wú)法處理錯(cuò)誤。

以與其他中間件函數(shù)相同的方式定義錯(cuò)誤處理中間件函數(shù),除了四個(gè)參數(shù)而不是三個(gè),特別是簽名(err, req, res, next)

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send("Something broke!")
})

有關(guān)錯(cuò)誤處理中間件的詳細(xì)信息,請(qǐng)參閱:錯(cuò)誤處理。

內(nèi)置中間件

從版本4.x開(kāi)始,Express不再依賴于Connect,之前包含在Express中的中間件函數(shù)現(xiàn)在位于不同的模塊中,查看中間件函數(shù)列表。

Express具有以下內(nèi)置中間件函數(shù):

express.static提供靜態(tài)資源,如HTML文件、圖像等。

express.json使用JSON的有效負(fù)載解析傳入的請(qǐng)求,注意:適用于Express 4.16.0+。

express.urlencoded使用URL編碼的有效負(fù)載解析傳入的請(qǐng)求,注意:適用于Express 4.16.0+。

第三方中間件

使用第三方中間件為Express應(yīng)用程序添加功能。

安裝Node.js模塊以獲得所需的功能,然后在應(yīng)用程序級(jí)別或路由器級(jí)別將其加載到你的應(yīng)用程序中。

以下示例說(shuō)明了安裝和加載cookie解析中間件函數(shù)cookie-parser。

$ npm install cookie-parser
var express = require("express")
var app = express()
var cookieParser = require("cookie-parser")

// load the cookie-parsing middleware
app.use(cookieParser())

有關(guān)Express常用的第三方中間件函數(shù)的部分列表,請(qǐng)參閱:第三方中間件。

上一篇:編寫中間件 下一篇:使用模板引擎

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

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

相關(guān)文章

  • Koa v2.x 中文文檔 Koa 對(duì)比 Express

    摘要:使用承諾和異步功能來(lái)擺脫回調(diào)地獄的應(yīng)用程序,并簡(jiǎn)化錯(cuò)誤處理。它暴露了自己的和對(duì)象,而不是的和對(duì)象。因此,可被視為的模塊的抽象,其中是的應(yīng)用程序框架。這使得中間件對(duì)于整個(gè)堆棧而言不僅僅是最終應(yīng)用程序代碼,而且更易于書(shū)寫,并更不容易出錯(cuò)。 Koa 與 Express 此系列文章的應(yīng)用示例已發(fā)布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進(jìn)或 Star 關(guān)注更新...

    summerpxy 評(píng)論0 收藏0
  • Express 文檔express())

    摘要:方法此中間件在及更高版本中可用。由于的形狀基于用戶控制的輸入,因此該對(duì)象中的所有屬性和值都是不可信的,應(yīng)該在信任之前進(jìn)行驗(yàn)證。注意為獲得最佳結(jié)果,請(qǐng)使用反向代理緩存來(lái)提高服務(wù)靜態(tài)資源的性能。 express() 創(chuàng)建一個(gè)Express應(yīng)用程序,express()函數(shù)是express模塊??導(dǎo)出的頂級(jí)函數(shù)。 var express = require(express); var app ...

    oysun 評(píng)論0 收藏0
  • Express 文檔(常見(jiàn)問(wèn)題)

    摘要:常見(jià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)參閱,了解以模型為中心的基于的框架。 常見(jiàn)問(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 文檔(編寫間件

    摘要:編寫中間件中間件函數(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
  • Express 文檔(靜態(tài)文件)

    摘要:要使用多個(gè)靜態(tài)資源目錄,請(qǐng)多次調(diào)用中間件函數(shù)按照使用中間件函數(shù)設(shè)置靜態(tài)目錄的順序查找文件。注意為獲得最佳結(jié)果,請(qǐng)使用反向代理緩存來(lái)提高服務(wù)靜態(tài)資源的性能。 靜態(tài)文件 要提供靜態(tài)文件(如images、CSS文件和JavaScript文件),請(qǐng)使用Express中的express.static內(nèi)置中間件功能,函數(shù)簽名是: express.static(root, [options]) ro...

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

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

0條評(píng)論

閱讀需要支付1元查看
<