fiber中use路径前缀仅对后续注册路由生效,且不自动剥离;必须前置调用use、配合group或stripprefix才能正确匹配并处理路径。

在Fiber中用Use方法挂载中间件或子路由时,路径前缀未生效导致所有请求都被拦截或完全不匹配,本质是没理解Use的路径匹配逻辑与路由注册的差异。
Use方法路径前缀生效的前提
Use方法只对**其后注册的路由**生效,且前缀匹配发生在路由查找阶段,不是URL重写。必须确保Use调用在app.Get/Post等路由注册之前,否则前缀形同虚设。
这一步操作起来很简单,直接把Use语句写在所有app.Xxx()调用之前即可。
【Use路径前缀不会自动剥离,后端处理器收到的c.Path()仍含前缀】比如app.Use("/api") → app.Get("/users"),实际匹配路径是/api/users,但c.Path()返回的是/api/users,不是/users。
正确配置Use路径前缀的两种方式
方法一:Use + 子路由组(推荐)
1、调用app.Use("/admin")声明前缀;
2、紧接着用app.Group("/admin", ...)创建路由组;
3、在Group内部注册的路由会自动继承/admin前缀,且c.Path()返回的是去前缀后的路径(需配合StripPrefix中间件)。
方法二:Use + 手动剥离前缀(兼容旧逻辑)
app.Use("/v1", func(c *fiber.Ctx) error {
c.Set("X-Api-Version", "v1")
return c.Next()
})
→ 此时所有/v1开头的请求都会先进入该中间件,但后续路由仍需显式注册为app.Get("/v1/users")才能命中。
注意:若同时存在app.Use("/v1")和app.Get("/v1/users"),前者会拦截所有/v1/*请求,后者永远不会执行——除非你在Use中间件里明确调用c.Next()。
避免前缀错位的关键操作
第一步:初始化app后立即调用Use,不要穿插任何路由注册;
第二步:确认StrictRouting配置是否影响路径匹配——如果关闭StrictRouting,/admin和/admin/会被视为同一路径,可能导致预期外的匹配;
第三步:调试时打印c.Path()和c.OriginalURL(),验证前缀是否被正确识别;
【Use路径不支持通配符,/api/*这种写法会直接报错】只能用静态前缀如"/api"、"/v2"或参数前缀如"/user/:id"(但后者属于路由参数,非Use前缀能力范畴)。











