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

总结

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

相关推荐
Never_Satisfied10 分钟前
在JavaScript / HTML中,div容器在内容过多时不显示超出的部分
开发语言·javascript·html
ZHOUYUANN1 小时前
我用JavaScript复刻了某宝的小游戏动物大迁徙消消乐
前端·javascript·游戏开发
Asort1 小时前
JavaScript设计模式(十三)——责任链模式:构建灵活高效的请求处理链
前端·javascript·设计模式
摸着石头过河的石头1 小时前
JavaScript继承与原型链:揭开对象传承的神秘面纱
前端·javascript
许久'1 小时前
环境搭建node.js gnvm
node.js
用户6387994773052 小时前
我把我的 monorepo 迁移到 Bun,这是我的真实反馈
javascript·架构
用户57973883973152 小时前
JavaScript(Node.JS) 使自定义类可以通过下标访问内部可迭代值
javascript
细节控菜鸡2 小时前
Webpack 核心知识点详解:proxy、热更新、Loader与Plugin全解析
前端·webpack·node.js
博客zhu虎康2 小时前
Element中 el-tree 如何隐藏 Tree 组件中的父节点 Checkbox
javascript·vue.js·elementui
欧阳天2 小时前
http环境实现通知
前端·javascript