摘要:編寫中間件中間件函數(shù)是可以訪問請求對象響應對象以及應用程序請求響應周期中的函數(shù)的函數(shù),函數(shù)是路由器中的一個函數(shù),當被調用時,它會在當前中間件之后執(zhí)行中間件。結束請求響應周期。此外,根路徑路由的回調函數(shù)使用中間件函數(shù)添加到請求對象的屬性。
編寫中間件
中間件函數(shù)是可以訪問請求對象(req)、響應對象(res)以及應用程序請求—響應周期中的next函數(shù)的函數(shù),next函數(shù)是Express路由器中的一個函數(shù),當被調用時,它會在當前中間件之后執(zhí)行中間件。
中間件函數(shù)可以執(zhí)行以下任務:
執(zhí)行任何代碼。
更改請求和響應對象。
結束請求—響應周期。
調用堆棧中的下一個中間件。
如果當前的中間件函數(shù)沒有結束請求—響應周期,它必須調用next()將控制權傳遞給下一個中間件函數(shù),否則,請求將被掛起。
下圖顯示了中間件函數(shù)調用的元素:
示例以下是一個簡單的“Hello World” Express應用程序示例,本文的其余部分將為應用程序定義和添加兩個中間件函數(shù):一個名為myLogger,用于打印簡單的日志消息,另一個名為requestTime,用于顯示HTTP請求的時間戳。
var express = require("express") var app = express() app.get("/", function (req, res) { res.send("Hello World!") }) app.listen(3000)中間件函數(shù)myLogger
這是一個名為“myLogger”的中間件函數(shù)的簡單示例,當對應用程序的請求通過時,此函數(shù)只打印“LOGGED”,中間件函數(shù)被分配給名為myLogger的變量。
var myLogger = function (req, res, next) { console.log("LOGGED") next() }
注意上面的調用next(),調用此函數(shù)會調用應用程序中的下一個中間件函數(shù),next()函數(shù)不是Node.js或Express API的一部分,而是傳遞給中間件函數(shù)的第三個參數(shù)。next()函數(shù)可以命名為任何,但按照慣例,它總是被命名為“next”,為避免混淆,請始終使用此約定。
要加載中間件函數(shù),請調用app.use(),指定中間件函數(shù),例如,以下代碼在到根路徑(/)的路由之前加載myLogger中間件函數(shù)。
var express = require("express") var app = express() var myLogger = function (req, res, next) { console.log("LOGGED") next() } app.use(myLogger) app.get("/", function (req, res) { res.send("Hello World!") }) app.listen(3000)
每次應用程序收到請求時,它都會向終端輸出消息“LOGGED”。
中間件加載的順序很重要:首先加載的中間件函數(shù)也會先執(zhí)行。
如果myLogger在到達根路徑的路由之后加載,則請求永遠不會到達它,并且應用程序不會打印“LOGGED”,因為根路徑的路由處理程序會終止請求—響應周期。
中間件函數(shù)myLogger只是打印一條消息,然后通過調用next()函數(shù)將請求傳遞給堆棧中的下一個中間件函數(shù)。
中間件函數(shù)requestTime接下來,我們將創(chuàng)建一個名為“requestTime”的中間件函數(shù),并將一個名為requestTime的屬性添加到請求對象中。
var requestTime = function (req, res, next) { req.requestTime = Date.now() next() }
該應用程序現(xiàn)在使用requestTime中間件函數(shù),此外,根路徑路由的回調函數(shù)使用中間件函數(shù)添加到req(請求對象)的屬性。此外,根路徑路由的回調函數(shù)使用中間件函數(shù)添加到req(請求對象)的屬性。
var express = require("express") var app = express() var requestTime = function (req, res, next) { req.requestTime = Date.now() next() } app.use(requestTime) app.get("/", function (req, res) { var responseText = "Hello World!
" responseText += "Requested at: " + req.requestTime + "" res.send(responseText) }) app.listen(3000)
當你向應用程序的根目錄發(fā)出請求時,應用程序現(xiàn)在會在瀏覽器中顯示你的請求的時間戳。
因為你可以訪問請求對象、響應對象、堆棧中的下一個中間件函數(shù)以及整個Node.js API,所以中間件函數(shù)的可能性是無窮無盡的。
有關Express中間件的更多信息,請參閱:使用Express中間件。
可配置的中間件如果你需要中間件可配置,請導出一個接受選項對象或其他參數(shù)的函數(shù),然后根據(jù)輸入?yún)?shù)返回中間件實現(xiàn)。
文件:my-middleware.js
module.exports = function(options) { return function(req, res, next) { // Implement the middleware function based on the options object next() } }
現(xiàn)在可以使用中間件,如下所示。
var mw = require("./my-middleware.js") app.use(mw({ option1: "1", option2: "2" }))
有關可配置中間件的示例,請參閱cookie-session和compression。
上一篇:路由 下一篇:使用中間件文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/100451.html
摘要:捕捉錯誤確保捕獲運行路由處理程序和中間件時發(fā)生的所有錯誤非常重要。對和的調用表明當前處理程序已完成并處于什么狀態(tài),將跳過鏈中的所有剩余處理程序,除了那些設置為處理上述錯誤的處理程序。 錯誤處理 錯誤處理是指Express如何捕獲和處理同步和異步發(fā)生的錯誤,Express附帶一個默認的錯誤處理程序,因此你無需編寫自己的錯誤處理程序即可開始使用。 捕捉錯誤 確保Express捕獲運行路由處...
摘要:使用承諾和異步功能來擺脫回調地獄的應用程序,并簡化錯誤處理。它暴露了自己的和對象,而不是的和對象。因此,可被視為的模塊的抽象,其中是的應用程序框架。這使得中間件對于整個堆棧而言不僅僅是最終應用程序代碼,而且更易于書寫,并更不容易出錯。 Koa 與 Express 此系列文章的應用示例已發(fā)布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新...
摘要:單頁博客應用編寫總結很久之前就想寫一個博客應用在一開始想要直接用和模板直接寫但是暑假一開始的時候不小心入了的坑所以就一不做二不休直接用寫那既然用了不寫個單頁應用也過意不去了不前前后后寫了將近兩個星期現(xiàn)在看來這其實是一個很容易的應用但是鑒于 React-Express單頁博客應用編寫總結 很久之前就想寫一個博客應用.在一開始想要直接用express和ejs模板直接寫, 但是暑假一開始的時...
摘要:文檔基于的快速開放極簡主義的框架,是一個最小且靈活的應用程序框架,為和移動應用程序提供了一組強大的功能。借助無數(shù)的實用程序方法和中間件,你可以快速輕松地創(chuàng)建強大的。提供了一層輕薄的基本應用程序功能,而不會隱藏你熟悉和喜愛的功能。 Express 文檔 基于Node.js的快速、開放、極簡主義的Web框架,Express是一個最小且靈活的Node.js Web應用程序框架,為Web和移動...
摘要:常見問題此系列文章的應用示例已發(fā)布于可以幫助改進或關注更新歡迎替代它更像是,但是很多的好東西被轉移到的中間件級別,以幫助形成更強大的基礎。這使得中間件對于整個堆棧而言不僅僅是最終應用程序代碼,而且更易于書寫,并更不容易出錯。 常見問題 此系列文章的應用示例已發(fā)布于 GitHub: koa-docs-Zh-CN. 可以 Fork 幫助改進或 Star 關注更新. 歡迎 Star. Koa...
閱讀 1795·2021-10-27 14:15
閱讀 3900·2021-10-08 10:12
閱讀 1194·2021-09-22 15:55
閱讀 3248·2021-09-22 15:17
閱讀 857·2021-09-02 15:40
閱讀 1763·2019-08-29 18:33
閱讀 1117·2019-08-29 15:22
閱讀 2374·2019-08-29 11:08