中间件:拦截HTTP请求的函数
一 核心作用
-
请求到达路由前执行操作(如解析、校验)
-
响应发送前执行操作(如日志、处理)
-
中间件的标准形式:
function middleware(req,res,next){
//处理逻辑(解析/校验等)
next() ;//传递控制权给下一个中间件/路由
} -
Express应用本质是中间件链组合,每个请求从头到尾以此处理
二 中间件分类
-
应用程序级中间件
-
通过app.use()挂载,作用于全局或路径
-
用于统一处理解析、日志、安全等全局逻辑
app.use(express.json()) // 解析JSON 请求体
//全局日志记录
app.use((req,res,next)=>{
console.log([${Date.now()}]${req.method}${req.url})
next()
})
-
-
路由级中间件
-
挂载在express.Router()实例上,仅作用当前路由模块
-
用于模块化组织业务逻辑
const router =express.Router()
router.use((req,res,next)=>{
console.log('进入用户模块')
next()
})
app.use('/users',router)
-
-
错误处理中间件
-
定义:捕获并处理错误,必须接收四个参数(err,req,res,next)
-
统一返回错误响应,提升系统健壮性
//错误中间件
app.use(()=>{
res.send({
status:1,
msg:err instanceof Error?err.message:err,
})
})
-
-
内置中间件
- 定义:Express原生提供,无需额外安装
- 例子
- express.static('public'):托管静态资源
- express.json():解析JSON 请求体
- express.urlencoded();解析请求体数据
-
第三方中间件
- 社区开发,npm 安装扩展功能
- 例子
- 数据验证:express-validator
- 文件上传:multer
- 解决跨域问题:cors
- 价值;副高高频需求、成熟可靠