什麼是Express中間件?Node要怎麼使用?以下這篇文章就來跟大家介紹一下Express中間件的簡單使用方法,希望對大家有幫助!
中間件特別指業務流程的中間處理環節。
當一個請求到達Express 的伺服器之後,可以連續呼叫多個中間件,從而對這次請求進行預處理。
本質上就是function處理函數
注意:中間件函數的形參列表中,必須包含next參數。而路由處理函數中只包含req和res,
// next参数必须在最后一个传入 const mw = (req, res, 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() }
#一定要在路由之前註冊中間件
客戶端傳送過來的請求,可以連續呼叫多個中間件進行處理
#執行完中間件的業務程式碼之後,不要忘記呼叫next()函數
為了防止程式碼邏輯混亂,當呼叫next()函數後不要再寫額外的程式碼
連續呼叫多個中間件時,多個中間件之間,共享req和res物件
應用級別的中間件
路由層級的中間件
#錯誤層級的中間件
透過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 4.16.0版本開始,Express 內建了3個常用的中間件,極大的提高了Express專案的開發效率和體驗:
// 配置解析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
這個第三方中間件,來解析請求體資料。使用步驟如下:
#安裝中間件
註冊並使用中間件
注意:Express 內建的express.urlencoded 中介軟體,就是基於body-parser這個第三方中介軟體進一步封裝出來的。
更多node相關知識,請造訪:nodejs 教學!
以上是什麼是Express中間件? Node要怎麼使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!