返回术语

后端

中间件Middleware

你可能会问

中间件到底是什么?请求在见到业务逻辑之前,都过了谁的手?

简单来说

在请求到达核心逻辑前后执行的通用处理,例如鉴权、日志或限流。

动态说明一条公用的通道Middleware
一个请求进入通道

GET/orders

凭证🎫 有效

不管去哪,都走这条道
过完公用的关,才见业务
每个请求都先穿过同一串中间件,再抵达各自的处理逻辑。

01 · 先这样理解

把抽象概念放进真实场景

在请求到达核心逻辑前后执行的通用处理,例如鉴权、日志或限流。

换个角度想

中间件像机场的安检通道:不管你飞哪儿,都先过同样几道关——查身份、称行李、留记录。目的地各不相同,通道却是公用的:一次搭好,所有航班共享。

02 · 点击演示

一个请求,要过几道公用的关?

突出显示的部分,就是当前概念在整条流程中负责的位置。

  1. GET /orders

    凭证🎫 有效(没有)

    当前步骤
  2. 凭证有效——放行,下一关
    401 · 没有凭证——原路返回
    等待进入
  3. log: user_42 GET /orders

    顺手记一笔,继续往前

    没走到这一关——
    请求在鉴权时已被送回
    等待进入
  4. 200业务逻辑收到请求穿过通道的,才见得到它
    401业务代码毫不知情这正是中间件的价值:脏活累活挡在门外
    等待进入
1 / 4

Enter · 请求进入通道

03 · 放进真实任务

什么时候会遇到它

统一鉴权

登录校验写一次,所有要保护的 endpoint 共享。

统一记录

日志和耗时统计在通道里顺手完成,业务代码保持干净。

统一限流

同一个来源请求太猛?在通道口就拦下,别打进业务。

04 · 想一想

用一个问题检查理解

十个 endpoint 都需要登录才能访问。把校验代码复制十份,还是有更好的办法?

查看答案

写一个鉴权中间件,挂在这十个 endpoint 前面。校验逻辑只有一份,改一次全体生效——和组件「一处修改、处处生效」是同一个道理。

老师提醒

最容易踩的坑

中间件的顺序就是流水线的顺序:日志放在鉴权前还是后,记下来的东西完全不同。加中间件时,想清楚它站在队伍的第几位。

⌘K搜索知识库

最近收录

正在载入知识索引…