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

总结

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

相关推荐
兔老大的胡萝卜1 分钟前
pm2 部署nuxt4项目
javascript·nuxt4
阿蒙Amon4 分钟前
JavaScript学习笔记:17.闭包
javascript·笔记·学习
Wpa.wk6 分钟前
自动化测试 - 文件上传 和 弹窗处理
开发语言·javascript·自动化测试·经验分享·爬虫·python·selenium
l1t8 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
composurext17 分钟前
录音切片上传
前端·javascript·css
程序员小寒17 分钟前
前端高频面试题:深拷贝和浅拷贝的区别?
前端·javascript·面试
zhougl99623 分钟前
Vue 中的 `render` 函数
前端·javascript·vue.js
跟着珅聪学java25 分钟前
HTML中设置<select>下拉框默认值的详细教程
开发语言·前端·javascript
想睡好32 分钟前
setup
前端·javascript·html
桜吹雪38 分钟前
DeepSeekV3.2模型内置Agent体验
javascript·人工智能