关于express中间件的工作原理

前言

在 Express 开发中,一定要注意路由的挂载顺序,特别是挂载了中间件的路由!否则很容易出现逻辑错误。

例如,我在 '/' 路由上附带了一个鉴权前置中间件 ,而 '/waibu' 路由用于给外部服务使用,也有一个特定的鉴权前置中间件。如果顺序是如下这样:

js 复制代码
/* 伪代码 */
app.use(
    '/',
    middleware1
)

app.use(
    '/waibu',
    middleware2
)

那么请求 /waibu 路由的请求会被 middleware1 进行校验,造成逻辑错误。因为 /waibu 路径在 Express 的路由匹配规则中,会被视为 / 的子路径,所以 /waibu 的请求会先经过 / 的中间件。

解决方法

解决方法非常简单,只需要调整路由挂载顺序即可:

js 复制代码
/* 伪代码 */
app.use(
    '/waibu', // 先挂载
    middleware2
)

app.use(
    '/', // 后挂载
    middleware1
)

原理解析

Express 的路由匹配 是按照代码中挂载的顺序依次进行的。

当一个请求到达服务器时,Express 会从上到下 依次匹配挂载的路由和中间件。如果先挂载了 / 的中间件,那么任何以 / 开头的路径(包括 /waibu)都会先经过这个中间件。

通过调整挂载顺序,将更具体的路径(如 /waibu)放在更通用的路径(如 /)之前,可以确保请求能够正确地匹配到对应的中间件。

注意事项

  1. 明确路由优先级 :在设计路由时,要明确哪些路由是更具体的,哪些是更通用的。更具体的路由 应该优先挂载
  2. 避免路径冲突:尽量避免路径设计过于相似,以免导致路由匹配的混淆。
  3. 测试路由顺序:在开发过程中,可以通过编写单元测试来验证路由的挂载顺序是否正确,确保逻辑符合预期。

总结

午睡去了! 拜拜(●'◡'●)!

相关推荐
腻害兔4 分钟前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
gis开发之家1 小时前
《Vue3 从入门到大神37篇》Vue3 源码详解(七):watch 与 watchEffect 源码对比——副作用是如何被追踪的?
javascript·前端框架·vue3·vue3源码
bloglin999992 小时前
langchain 和 langgraph 和 react
javascript·react.js·langchain
触底反弹2 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
会周易的程序员4 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
带娃的IT创业者4 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
新中地GIS开发老师6 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发
blns_yxl6 小时前
正则驱动实时表单验证(HTML+CSS+JS+正则)
javascript·css·html
Quz7 小时前
QML 与 JavaScript 交互方式:内联函数、外部文件、信号槽与工作线程
javascript·qt
Allshadow7 小时前
Nest.js - 连接数据库
javascript·nestjs