【问题标题】:How to add different middleware to routes under same sub route in gofibergofiber中如何给同一子路由下的路由添加不同的中间件
【发布时间】:2023-01-15 23:09:23
【问题描述】:
我有一个如下所示的路由配置,其中有一个基本路由和 5 个子路由
baseRoute := app.Group("/base")
baseRoute.Post("/sub_route1", handler1)
baseRoute.Post("/sub_route2", handler2)
baseRoute.Post("/sub_route3", handler3)
baseRoute.Post("/sub_route4", handler4)
baseRoute.Post("/sub_route5", handler5)
现在我有两个不同的中间件。我需要在子路径 1、2、3 上使用 middleware_1,在子路径 4、5 上使用 middleware_2。执行此操作的最佳语法是什么。我遇到的解决方案是使用 app.Use("/path", middleware) 方法并在每个路由中显式声明中间件。这是唯一的解决方案,还是我们有更简洁的方法。
【问题讨论】:
标签:
go
routes
middleware
go-fiber
【解决方案1】:
你可以这样做:
baseRoute := app.Group("/base")
usesM1 := baseRoute.Group("/", middleware1)
usesM1.Post("/sub_route1", handler1)
usesM1.Post("/sub_route2", handler2)
usesM1.Post("/sub_route3", handler3)
usesM2 := baseRoute.Group("/", middleware2)
usesM2.Post("/sub_route4", handler4)
usesM2.Post("/sub_route5", handler5)
【解决方案2】:
你需要的是在中间件方法中使用 return ctx.Next() 让它在一个路由中通过多个方法。
baseRoute.Post("/some_route", handler1, handler2, handler3, handler4)
假设您有 handler2 需要执行并移动到 handler3 和 handler4 之后。
你实现你的代码在每个处理程序中做一些检查。如果处理程序需要在满足条件时转到下一个处理程序,只需运行此 return ctx.Next()