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