全书目录

第三十三篇:Fiber 完全指南 —— 极简高压快线城区宇宙

第六章:中间件 —— 一连串检查站,而不是魔法

1 分钟 322 字 第 617 / 962 个阅读单元

Fiber 的灵魂之一就是中间件链。

看一个最常见的例子:

go
app.Use(func(c fiber.Ctx) error {
    c.Set("X-City", "Fiber")
    return c.Next()
})

app.Get("/hello", func(c fiber.Ctx) error {
    return c.SendString("hello")
})

执行顺序是:

text
请求进城
  ▼
先到 app.Use 检查站
  ▼
执行中间件逻辑
  ▼
调用 c.Next()
  ▼
放行到真正路由
  ▼
返回响应

如果你不调用 c.Next(),车就停在检查站,不会继续往后走。


#1. 最重要的一句:c.Next() 就是“继续放行”
go
app.Use(func(c fiber.Ctx) error {
    if c.Get("Authorization") == "" {
        return c.SendStatus(fiber.StatusUnauthorized)
    }
    return c.Next()
})

这就像:

  • 没证件,直接拦下
  • 有证件,继续放行到后面窗口

#2. 中间件也讲顺序
go
app.Use(requestid.New())
app.Use(logger.New())
app.Use(authMiddleware)

这和现实中的路网完全一样:

  • 先贴请求编号
  • 再写日志
  • 再做鉴权

顺序一乱,记录和行为都可能乱。

Fiber 官方 logger 文档甚至直接提醒:

注册顺序很重要,最好尽早注册。


#3. Use("/api", ...) 不是随便糊的
go
app.Use("/api", func(c fiber.Ctx) error {
    return c.Next()
})

它的含义是:

  • 作用于 /api
  • 也作用于 /api/...
  • 但不作用于 /apixxx

所以你可以把它理解为“给某条主干快线设置检查站”。