二、express中间件
一、中間件引入
實(shí)現(xiàn)加入日志模塊功能:
1. 我們能想到的方案:
將日志輸出代碼封裝到函數(shù)中,然后需要日志輸出的地方調(diào)用這個(gè)函數(shù)即可。
app.js文件:
2. 使用中間件
二、中間件的概念
在我理解Express 中間件和AOP面向切面編程就是一個(gè)意思,就是都需要經(jīng)過經(jīng)過的一些步驟,不去修改自己的代碼,以此來擴(kuò)展或者處理一些功能。
什么是AOP?中文意思是面向切面編程,聽起來感覺很模糊。先舉個(gè)生產(chǎn)的例子。
最后在流水線中的空隙插上兩個(gè)工人去處理,形成采摘-分類-清洗-包裝
-貼標(biāo)簽的新流程,而且工人可以隨時(shí)撤回。
AOP(Aspect Oriented Programming)面向切面編程:
- 將日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等代碼從業(yè)務(wù)邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們獨(dú)立到非指導(dǎo)業(yè)務(wù)邏輯的方法中,進(jìn)而改變這些行為的時(shí)候不影響業(yè)務(wù)邏輯的代碼。
- 利用AOP可以對業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率和可維護(hù)性。
總結(jié):就是在現(xiàn)有代碼程序中,在程序生命周期或者橫向流程中加入/減去一個(gè)或多個(gè)功能,不影響原有功能。
三、Express中的中間件
在Express中,中間件就是一個(gè)可以訪問請求對象、響應(yīng)對象和調(diào)用next方法的一個(gè)函數(shù)。
在中間件函數(shù)中可以執(zhí)行以下任何任務(wù):
- 執(zhí)行任何代碼
- 修改request 或者response響應(yīng)對象
- 結(jié)束請求響應(yīng)周期
- 調(diào)用下一個(gè)中間件
注意:如果當(dāng)前的中間件功能沒有結(jié)束請求-響應(yīng)周期,則必須調(diào)用next()將控制權(quán)傳遞給下一個(gè)中間件功能。否則,該請求將被掛起。
四、Express中的中間件分類
在Express中應(yīng)用程序可以使用以下類型的中間件:
- 應(yīng)用程序級別中間件
此示例顯示了一個(gè)中間件子堆棧,該子堆棧處理對/user/:id路徑的GET請求。
表示繼續(xù)跳轉(zhuǎn)執(zhí)行下一個(gè)middle或者route函數(shù)。
表示丟棄當(dāng)前route的剩余callback函數(shù),注意只在由app.METHOD()/route.METHOD()中定義的middleware函數(shù)中生效。
對于任何非’route’參數(shù)(不管是一個(gè)簡單數(shù)字或者還是一個(gè)字符串)都被認(rèn)為是一個(gè)err,跳轉(zhuǎn)到錯(cuò)誤處理函數(shù)。
中間件也可以在數(shù)組中聲明為可重用。此示例顯示了一個(gè)帶有中間件子堆棧的數(shù)組,該子堆棧處理對/user/:d路徑的GET請求
- 路由級別中間件
路由器級中間件與應(yīng)用程序級中間件的工作方式相同,只不過它綁定到實(shí)例express.Router()
使用router.use()和router.METHOD()函數(shù)加載路由器級中間件.
以下示例代碼通過使用路由器級中間件來復(fù)制上面顯示的用于應(yīng)用程序級中間件的中間件系統(tǒng):
- 錯(cuò)誤處理中間件
以與其他中間件函數(shù)相同的方式定義錯(cuò)誤處理中間件函數(shù),除了使用四個(gè)參數(shù)而不是三個(gè)參數(shù)(特別是使用簽名(err,req,res,next))之外:
錯(cuò)誤處理中間件始終帶有四個(gè)參數(shù)。你必須提供四個(gè)參數(shù)以將其標(biāo)識為錯(cuò)誤處理中間件函數(shù)。即使不需要使用該next對象,也必須指定它以維護(hù)簽名。否則,該next 對象將被解釋為常規(guī)中間件,并且將無法處理錯(cuò)誤。
如果將任何內(nèi)容傳遞給該next()函數(shù)(字符串除外’route’),Express都會將當(dāng)前請求視為錯(cuò)誤,并且將跳過所有剩余的非錯(cuò)誤處理路由和中間件函數(shù)。
中間件處理404:
-
內(nèi)置中間件
Express 具有以下內(nèi)置中間件函數(shù):
-
第三方中間件
早期的Express內(nèi)置了很多中間件.后來Express在4.x之后移除了這些內(nèi)置中間件,官方把這些功能性中間件以包的形式單獨(dú)提供出來.這樣做的目的是
為了保持Express本身極簡靈活的特性,開發(fā)人員可以根據(jù)自己的需要去靈
活的使用.
有關(guān)Express常用的第三方中間件功能的部分列表,請參閱:
https://www.expressjs.com.cn/resources/middleware.html
第三方中間件morgan的使用:
morgan用來輸出日志信息
總結(jié)
以上是生活随笔為你收集整理的二、express中间件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue移动端项目——Vant 移动端 R
- 下一篇: 大学python教材思维导图_Pytho