Nodejs之Express中間件的分類介紹
中間件的分類
為了方便大家理解和記憶中間件的使用,Express官方把常見的中間件用法,分成了5大類
分別是
- 應(yīng)用級別的中間件
- 路由級別的中間件
- 錯誤級別的中間件
- Express內(nèi)置的中間件
- 第三方的中間件
1 應(yīng)用級別的中間件
通過app.use()或app.get()或app.post(),綁定到app實例上的中間件,叫做應(yīng)用級別的中間件,代碼示例如下:
只要是直接通過app.xxx調(diào)用的,都可以理解為是應(yīng)用級別的中間件
// 應(yīng)用級別的中間件(全局中間件)
app.use((req, res, next) => {
? ? console.log("這是中間件函數(shù)")
? ? next()
})
// 應(yīng)用級別的中間件(局部中間件)
app.get("/user", mw, (req, res) => {
? ? res.send('success')
})2 路由級別的中間件
綁定到express.Router()實例上的中間件,叫做路由級別的中間件。
它的用法和應(yīng)用級別中間件沒有任何區(qū)別。
只不過,應(yīng)用級別中間件是綁定到app實例上,路由級別中間件綁定到router實例上,代碼示例如下:
const express = require("express")
const router = express.Router()
// 路由級別的中間件
router.use((req, res, next) => {
? ? console.log("Time: ", Date.now())
? ? next()
})
module.exports = router3 錯誤級別的中間件
錯誤級別中間件的作用:專門用來捕獲整個項目中發(fā)生的異常錯誤,從而防止項目異常崩潰的問題。
格式:錯誤級別中間件的function處理函數(shù)中,必須有4個形參,形參順序從前到后,分別是(err, req, res, next)。
// 路由
app.get("/user", (req, res) => {
? ? throw new Error("服務(wù)器內(nèi)部發(fā)生了錯誤!")
? ? res.send("Home Page")
})
// 錯誤級別的中間件,捕獲整個項目的異常錯誤
app.use((err, req, res, next) => {
? ? console.log("Error: " + err.message)
? ? res.send("Error: " + err.message)
})錯誤級別的中間件,必須注冊在所有路由之后,如果放在前面會導(dǎo)致在該中間件之后的錯誤無法被捕獲
4 Express內(nèi)置的中間件
自Express4.16.0版本開始,Express內(nèi)置了3個常用的中間件,極大的提高了Express項目的開發(fā)效率和體驗:
express.static快速托管靜態(tài)資源的內(nèi)置中間件,例如:HTML文件、圖片、CSS樣式等(無兼容性)express.json解析SON格式的請求體數(shù)據(jù)(有兼容性,僅在4.16.0+版本中可用)express.urlencoded解析URL-encoded格式的請求體數(shù)據(jù)(有兼容性,僅在4.16.0+版本中可用)
// 配置解析 application/json 格式數(shù)據(jù)的內(nèi)置中間件
app.use(express.json())
// 配置解析 application/x-www-form-urlencoded 格式數(shù)據(jù)的內(nèi)置中間件
app.use(express.urlencoded({ extended: false }))
app.post('/user', (req, res)=>{
?? ?// 在服務(wù)器, 可以使用 req.body 這個屬性,來接受客戶端端發(fā)過來的請求體數(shù)據(jù)
? ? // 在默認(rèn)情況下,如果把配置解析表單數(shù)據(jù)的中間價, 則 req.body 默認(rèn)等于 undefined
? ? console.log(req.body)
? ? res.send('ok')
})除了錯誤級別的中間件,其他的中間件,必須在路由之前進(jìn)行配置
5 第三方中間件
非Express官方內(nèi)置的,而是由第三方開發(fā)出來的中間件,叫做第三方中間件。在項目中,大家可以按需下載并配置第三方中間件,從而提高項目的開發(fā)效率。
例如:在express@4.16.0之前的版本中,經(jīng)常使用body-parser這個第三方中間件,來解析請求體數(shù)據(jù)。
使用步驟如下:
- 運行npm install body-parser安裝中間件
- 使用require導(dǎo)入中間件
- 調(diào)用app.use()注冊并使用中間件
Express內(nèi)置的express…urlencoded中間件,就是基于body~parser這個第三方中間件進(jìn)一步封裝出來的。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解node Async/Await 更好的異步編程解決方案
這篇文章主要介紹了詳解Async/Await 更好的異步編程解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
nodejs使用Sequelize框架操作數(shù)據(jù)庫的實現(xiàn)
這篇文章主要介紹了nodejs使用Sequelize框架操作數(shù)據(jù)庫的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
koa+mongoose實現(xiàn)簡單增刪改查接口的示例代碼
這篇文章主要介紹了koa+mongoose實現(xiàn)簡單增刪改查接口的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05
Node.js連接MySQL數(shù)據(jù)庫的操作步驟
在現(xiàn)代 Web 開發(fā)中,與數(shù)據(jù)庫的交互是不可避免的一部分,Node.js提供了許多庫和模塊,使得連接和操作 MySQL 數(shù)據(jù)庫變得相對簡單,本文將介紹如何使用Node.js連接MySQL數(shù)據(jù)庫,并進(jìn)行一些基本的操作,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11

