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

总结

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

相关推荐
拾光拾趣录43 分钟前
JavaScript屏幕切换检测方案
前端·javascript
CodeTransfer1 小时前
搬运一个前端锻炼面向对象思维的小案例
前端·javascript
Zestia1 小时前
从手写到应用——JavaScript数组方法总结
前端·javascript
集成显卡1 小时前
基于 Node.js 的 API 方式接入深度求索Deepseek、字节跳动豆包大模型
前端·人工智能·node.js
sunbyte1 小时前
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GithubProfies(GitHub 个人资料)
前端·javascript·css·vue.js·github·tailwindcss
Hijin1 小时前
快速搭建 Vite+vue3+TS+ESLint@9+Prettier+Husky@9+Commitlint 项目
前端·javascript·vue.js
遂心_2 小时前
React初学者必备:用“状态管家”Reducer轻松管理复杂状态!
前端·javascript·react.js
用户3379044802172 小时前
ECMA6 ---- Class篇 (重难点个人向)
javascript
李明卫杭州2 小时前
前端实现多标签页通讯
前端·javascript
在钱塘江2 小时前
《你不知道的JavaScript-上卷》第二部分-this和对象原型-笔记-6-行为委托
前端·javascript