关于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. 测试路由顺序:在开发过程中,可以通过编写单元测试来验证路由的挂载顺序是否正确,确保逻辑符合预期。

总结

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

相关推荐
高级程序源10 小时前
django大学生创新创业项目管理系统94923-计算机课程设计、毕业设计
javascript·vue.js·spring boot·后端·python·django·课程设计
lizz227610 小时前
Babel插件手册
javascript
VXbishe13 小时前
【课程设计】基于SpringBoot的乡村政务服务系统的设计与实现-计算机毕设77011
javascript·vue.js·spring boot·python·php·课程设计·政务
志尊宝13 小时前
Vue3 零基础每日笔记(037):动手封装 useMouse 与 useWindowSize——事件监听的标准模板
前端·javascript·vue.js·笔记·html5
shmily麻瓜小菜鸡14 小时前
TDD(测试驱动开发)详解
开发语言·javascript·typescript·node.js·ecmascript
wcy031015 小时前
POST为什么会发送两次请求
javascript·ajax
志尊宝15 小时前
Vue3 零基础每日笔记(047):动态路由与路由参数——:id 传参、query 传参、props 解耦
前端·javascript·vue.js·笔记·html5
半生过往16 小时前
Node.js 多版本管理完全指南
node.js
朝屯暮蒙vi19 小时前
随记:h5+中uploader不能添加参数数据,要通过task
javascript
梦帮科技1 天前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法