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

資訊專欄INFORMATION COLUMN

Express 文檔(使用中間件)

lieeps / 1078人閱讀

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

使用中間件

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

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

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

執(zhí)行任何代碼。

更改請求和響應(yīng)對象。

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

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

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

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

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

路由器級中間件

錯誤處理中間件

內(nèi)置中間件

第三方中間件

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

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

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

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

var app = express()

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

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

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

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

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

下面是一個使用掛載路徑在掛載點加載一系列中間件函數(shù)的示例,它說明了一個中間件子堆棧,它將任何類型的HTTP請求的請求信息打印到/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()
})

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

此示例顯示了一個中間件子堆棧,它處理對/user/:id路徑的GET請求。

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

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

此示例顯示了一個中間件子堆棧,它處理對/user/:id路徑的GET請求。

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")
})
路由器級中間件

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

var router = express.Router()

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

以下示例代碼通過使用路由器級中間件復(fù)制上面顯示的應(yīng)用程序級中間件的中間件系統(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)

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

此示例顯示了一個中間件子堆棧,它處理對/admin路徑的GET請求。

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)
})
錯誤處理中間件
錯誤處理中間件總是需要四個參數(shù),你必須提供四個參數(shù)以將其標(biāo)識為錯誤處理中間件函數(shù),即使你不需要使用next對象,也必須指定它以維護(hù)簽名,否則,next對象將被解釋為常規(guī)中間件,并且將無法處理錯誤。

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

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

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

內(nèi)置中間件

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

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

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

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

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

第三方中間件

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

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

以下示例說明了安裝和加載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ù)的部分列表,請參閱:第三方中間件。

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

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

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

相關(guān)文章

  • Koa v2.x 中文文檔 Koa 對比 Express

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

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

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

    oysun 評論0 收藏0
  • Express 文檔(常見問題)

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

    MyFaith 評論0 收藏0
  • Express 文檔(編寫間件

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

    nanchen2251 評論0 收藏0
  • Express 文檔(靜態(tài)文件)

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

    PiscesYE 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<