什麼是Express中間件? Node要怎麼使用?
什麼是Express中間件? Node要怎麼使用?以下這篇文章就來跟大家介紹一下Express中間件的簡單使用方法,希望對大家有幫助!
一、什麼是Express中間件
中間件特別指業務流程的中間處理環節。
二、Express中間件的呼叫流程
當一個請求到達Express 的伺服器之後,可以連續呼叫多個中間件,從而對這次請求進行預處理。
三、中間件格式
本質上就是function處理函數
注意:中間件函數的形參列表中,必須包含next參數。而路由處理函數中只包含req和res,
// next参数必须在最后一个传入 const mw = (req, res, next) => { ... // next()必须在最后调用 next() }
四、next()函數的作用
next函數是實現多個中間件連續呼叫的關鍵,它表示把流轉關係轉交給下一個中間件或路由。
五、全域生效的中間件
客戶端發起的任何請求,到達伺服器之後,都會觸發的中間件,叫做全域生效的中間件。 透過呼叫server.use(中間件函數),即可定義一個全域生效的中間件,範例程式碼如下:
const mw = (req, res, next) => { next() } const mw1 = (req, res, next) => { next() } // 全局生效的中间件,中间件调用顺序以传入顺序为准 server.use(mw,mw1)
六、局部生效的中間件
#局部中間件只在某一個指定的路由路徑生效
const mw = (req, res, next) => { next() } const mw1 = (req, res, next) => { next() } // 局部生效的中间件 server.get('/',mw,(req,res)=>{ res.send('路径:/') }) // 定义多个局部生效的中间件 // 1、直接逗号分隔 server.get('/',mw,mw1,(req,res)=>{ res.send('路径:/') }) // 2、或者使用数组包含 server.get('/',[mw,mw1],(req,res)=>{ res.send('路径:/') })
七、中間件的作用
多個中間件之間,共享同一份req和res。基於這樣的特性,我們可以在上游的中間件中,統一為req或 res物件添加自訂的屬性或方法,供下游的中間件或路由進行使用。
const mw = (req, res, next) => { // 添加属性 req.startTime=new Date() next() }
八、Express中間件的五個注意點
#一定要在路由之前註冊中間件
客戶端傳送過來的請求,可以連續呼叫多個中間件進行處理
#執行完中間件的業務程式碼之後,不要忘記呼叫next()函數
為了防止程式碼邏輯混亂,當呼叫next()函數後不要再寫額外的程式碼
連續呼叫多個中間件時,多個中間件之間,共享req和res物件
九、Express中間件的分類
應用級別的中間件
路由層級的中間件
#錯誤層級的中間件
- ##Express內建的中間件
- 第三方的中間件
- ##應用程式級別的中間件
透過app.use()或app.get()或app.post(),綁定到app實例上的中間件,叫做應用層級的中間件,程式碼範例如下:
// 全局生效的中间件(应用级别的中间件) server.use(mw,mw1) // 局部生效的中间件(应用级别的中间件) server.get('/',mw,mw1,(req,res)=>{ res.send(`请求进入服务器的时间:${req.startTime}`) })
登入後複製路由層級的中間件綁定到express.Router()實例上的中間件,叫做路由層級的中間件。它的用法和應用級別中間件沒有任何區別。只不過,應用層級中間件是綁定到app實例上,路由層級中間件綁定到router實例上,程式碼範例如下:
const router = require('./router/router') // 路由级别的中间件 router.use((req,res,next)=>{ next() })
登入後複製錯誤層級的中間件錯誤等級中間件的作用:專門用來捕捉整個專案中發生的異常錯誤,從而防止專案異常崩潰的問題。
格式∶錯誤等級中間件的 function處理函數中,必須有4個形參,形參順序從前到後,分別是(err, req, res, next)。
注意:錯誤等級的中間件,必須註冊在所有路由之後!// 人为制造错误 server.get('/err', (req, res) => { throw new Error('人为抛出错误!!!') res.send('err Page') }) // 定义错误级别的中间件 server.use((err, req, res, next) => { console.log('发生了错误:' + err.message); res.send('Error:'+err.message) next() })
登入後複製Express內建的中間件自Express 4.16.0版本開始,Express 內建了3個常用的中間件,極大的提高了Express專案的開發效率和體驗:
- express.static快速託管靜態資源的內建中間件,例如:HTML檔、圖片、CSS樣式等(無相容性)
- #express.json解析JSON格式的請求體資料(有相容性,僅在4.16.0 版本中可用)
- express.urlencoded解析URL-encoded格式的請求體資料(有相容性,僅在4.16.0 版本中可用)
- 第三方的中間件
// 配置解析application/json格式数据的内置中间件 server.use(express.json()) // 配置解析application/x-www-form-urlencoded格式数据的内置中间件 server.use(express.urlencoded({ extended: false })) // 测试解析json的内置中间件 server.post('/user',(req,res)=>{ // 在服务器,可以使用req.body这个属性来接受客户端发送过来的请求数据 // 默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined console.log(req.body); res.send('ok') }) // 测试解析urlencoded的内置中间件 server.post('/book',(req,res)=>{ console.log(req.body) res.send('book ok') })
登入後複製 -
非Express官方內建的,而是由第三方開發出來的中間件,叫做第三方中間件。在專案中,大家可以按需下載並配置第三方中間件,從而提高專案的開發效率。 例如:在
express@4.16.0之前的版本中,常使用
body-parser
這個第三方中間件,來解析請求體資料。使用步驟如下:- 執行
- npm install body-parser
#安裝中間件
使用require匯入中間件 - 呼叫
- server.use()
註冊並使用中間件
注意:Express 內建的express.urlencoded 中介軟體,就是基於body-parser這個第三方中介軟體進一步封裝出來的。
- npm install body-parser
更多node相關知識,請造訪:nodejs 教學!
以上是什麼是Express中間件? Node要怎麼使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

nvm刪除node的方法:1、下載「nvm-setup.zip」並將其安裝在C碟;2、設定環境變量,並透過「nvm -v」指令查看版本號;3、使用「nvm install」指令安裝node;4、透過「nvm uninstall」指令刪除已安裝的node即可。

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

這段時間在開發一個騰訊文檔全品類通用的HTML 動態服務,為了方便各品類接入的生成與部署,也順應上雲的趨勢,考慮使用Docker 的方式來固定服務內容,統一進行製品版本的管理。這篇文章就將我在服務 Docker 化的過程中累積起來的優化經驗分享出來,供大家參考。

這篇文章跟大家分享Node的進程管理工具“pm2”,聊聊為什麼需要pm2、安裝和使用pm2的方法,希望對大家有幫助!

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!

npm node gyp失敗是因為“node-gyp.js”跟“Node.js”版本不匹配,其解決辦法:1、透過“npm cache clean -f”清除node快取;2、透過“npm install -g n”安裝n模組;3、透過「n v12.21.0」指令安裝「node v12.21.0」版本即可。

身份驗證是任何網路應用程式中最重要的部分之一。本教程討論基於令牌的身份驗證系統以及它們與傳統登入系統的差異。在本教程結束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統身份驗證系統在繼續基於令牌的身份驗證系統之前,讓我們先來看看傳統的身份驗證系統。使用者在登入表單中提供使用者名稱和密碼,然後點擊登入。發出請求後,透過查詢資料庫在後端驗證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會話,然後在回應頭中傳回會話訊息,以便將會話ID儲存在瀏覽器中。提供用於存取應用程式中受
