必须用路由级绑定或group实现指定路径中间件,全局use会作用于所有路径;中间件须为func(*fiber.ctx) error类型,返回非nil error可中断流程,c.next()后须return防重复执行。

必须跳过 app.Use(),改用路由级绑定——否则中间件会作用于所有路径,根本做不到“指定路由”。
单个路由直接传中间件函数
在调用 app.Get()、app.Post() 等方法时,把中间件函数作为参数紧挨着路径之后、处理器之前传入。
-
authMiddleware必须是func(*fiber.Ctx) error类型,否则编译失败或运行时 panic - 中间件里若返回非
nilerror(比如c.Status(401).Send("no")),后续 handler 不会执行 - 若写了
c.Next()却没return,流程会继续往下走,导致 handler 重复执行或响应冲突 - 示例:
app.Get("/admin", authMiddleware, func(c *fiber.Ctx) error { return c.SendString("Admin only") })
多个路由共用中间件?用 Group 批量绑定
当一组路径(如 /api/v1/users、/api/v1/posts)都需要同一套前置逻辑时,app.Group() 是更清晰的选择。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- Group 创建后,所有挂载在其下的子路由自动继承中间件,且仅限该前缀路径生效
-
app.Group("/api", jwtAuth)返回的 group 对象,再调.Get()或.Post()才真正注册路由 - Group 中间件不污染
/、/health或其他前缀路径 - 注意:Group 本身不是路由,不会响应请求;它只是中间件 + 路径前缀的容器
全局 + 分组 + 单路由嵌套时的执行顺序
中间件执行顺序严格按代码书写顺序叠加,不是按“层级深浅”或“注册时间”。
- 先注册的全局中间件最先执行:
app.Use(logger)→app.Use(recover) - 然后是分组中间件:
api := app.Group("/api", jwtAuth) - 最后是单路由中间件:
api.Post("/delete", ipWhitelist, handler) - 完整链路:
logger → recover → jwtAuth → ipWhitelist → handler - 漏掉
return或误调c.Next()是最常导致“明明拦截了却还进 handler”的原因
最容易被忽略的是:中间件函数签名和 return 的配合。写完中间件别只测“能进”,要验证“拦截后是否真停住”——尤其在加了日志或鉴权之后,静默穿透比 401 更危险。










