本篇文章帶大家了解一下node中Express的中間件,介紹一下中間件的概念、中間件分類,希望對大家有所幫助!
Express是一個簡潔而靈活的Web應用程序開發(fā)框架,可以用來快速地搭建一個功能完整的Web應用程序;作為一個基于Node.js封裝的上層服務框架,Express提供了更簡潔的API,通過中間件和路由使應用程序的組織管理更加容易。
中間件的概念
中間件,就是將請求處理函數(shù)進行模塊化分解后的若干子處理函數(shù),一些列子處理函數(shù)可以形成一個中間件堆棧;
中間件,是在應用程序的請求-響應周期中能夠訪問請求對象req、響應對象res和next()函數(shù)的函數(shù),next()函數(shù)主要負責將控制權交給下一個中間件;如果當前中間件沒有終結請求,并且next()沒有被調用,那么請求將被掛起,后面定義的中間件將不會被執(zhí)行。、
中間件的執(zhí)行順序,嚴格按照注冊的順序從上到下開始匹配執(zhí)行。
中間件函數(shù),可以執(zhí)行以下任務:
- 執(zhí)行任何代碼
- 對請求和響應對象進行修改
- 終結請求-響應周期
- 調用堆棧中下一個中間件(next)
中間件的主要用途就是處理HTTP請求,用來完成特定的任務如登錄狀態(tài)驗證、請求日志、錯誤處理、Cookie等。
中間件分類
1 應用程序級中間件
使用app.use()函數(shù)將應用程序級中間件綁定到應用對象實例上
const app = express(); /*表示匹配任何路由*/ app.use(function(req,res,next){ console.log('請求時間:' + Date.now()); /*表示匹配完成這個中間件就繼續(xù)往下執(zhí)行。*/ next() })
2 路由級中間件
路由級中間件與應用程序級中間件的工作方式相同,只是它被綁定到路由器實例上
import express from 'express'; const app = express(); const router = express.router(); router.use( '/user', function (req, res, next) { console.log(1); next(); }, function (req, res, next) { console.log(2); next(); }, function (rex, res, next) { console.log(3); next(); } );
3 錯誤處理中間件
錯誤處理中間件總是需要4個參數(shù),必須提供4個參數(shù)來將其標識為錯誤處理中間件函數(shù)。即使不需要next函數(shù),也必須指定它。否則next函數(shù)被解釋為常規(guī)中間件,并且無法處理錯誤
app.use(function(err, req, res, next){ console.log(err.stack); res.status(500).send(err); })
4 內置中間件
Express具有以下內置中間件:
- express.static: 提供靜態(tài)資源服務
- express.router: 提供路由服務
5 第三方中間件
第三方中間件如body-parser、cookie-parser等
6 自定義中間件
自定義中間件被定義為一個函數(shù),接受req,res,next參數(shù),使用app.use()注冊中間件
function log(req,res,next) { req.requestTime = Date.now(); next() } // 注冊自定義中間件 app.use(log);
// 自定義可配置中間件 function log(options) { return function (req,res,next) { // 根據options實現(xiàn)中間件功能 next } }