我有一个路由配置如下,其中有一个基本路由和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)方法,并在每条路由中显式声明中间件。这是唯一的解决办法吗?还是我们有更干净的方法?
你可以这样做:
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)
您需要的是在中间件方法中使用return ctx.Next()
,让它在路由中通过多个方法。
baseRoute.Post("/some_route", handler1, handler2, handler3, handler4)
让我们假设你有一个handler2需要执行并移动到handler3和之后的handler4。
你实现你的代码在每个处理程序中做一些检查。如果一个处理程序需要在满足条件时转到下一个处理程序,只需运行此return ctx.Next()