如何解决运行前如何通过gin合并多个路由器
让我们说一个subemenuRoutes.go
文件中有一些路由,如下所示:
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetSubMenuRoutes return a group of routes for login
func GetSubMenuRoutes() *gin.Engine{
router := gin.Default()
menuRoutes := router.Group("/submenu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallsubmenus",middlewares.GetAllSubMenus)
}
}
return router
}
我是这样从main.go
运行它们的:
package main
import(
"fmt"
"github.com/IamFrost/api-5/pkg/routes"
"github.com/gin-gonic/gin"
"github.com/gin-contrib/cors"
)
func main(){
fmt.Println("from main")
router := gin.Default()
router = routes.GetSubMenuRoutes()
router.Use(cors.Default())
router.Run(":3000")
}
到此为止,一切正常。
现在我的问题是:
让我说文件menuRoutes.go
中还有其他路由:
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetMenuRoutes return a group of routes for login
func GetMenuRoutes() *gin.Engine{
router := gin.Default()
menuRoutes := router.Group("/menu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallmenus",middlewares.GetAllMenus)
}
}
return router
}
现在,我要同时从main中运行菜单路线和子菜单路线。
但是在我的main.go
中,您看到的是我在跑步前完成的
router = routes.GetSubMenuRoutes()
那么我该如何合并来自routes.GetSubMenuRoutes()
和routes.GetMenuRoutes()
的所有路由
在我致电router.Run
中的main.go
之前?
更新:
正如他们的文档所说,我在main.go
中想要这样的东西,但是我的路线来自函数。您会看到:我无法像v1或v2这样对我的路由进行硬编码,因为我的路由来自getMenuRoute()
和getSubmenuRoute()
函数
func main() {
router := gin.Default()
// Simple group: v1
v1 := router.Group("/v1")
{
v1.POST("/login",loginEndpoint)
v1.POST("/submit",submitEndpoint)
v1.POST("/read",readEndpoint)
}
// Simple group: v2
v2 := router.Group("/v2")
{
v2.POST("/login",loginEndpoint)
v2.POST("/submit",submitEndpoint)
v2.POST("/read",readEndpoint)
}
router.Run(":8080")
}
解决方法
您可以将其作为参数传递给路由器函数,而不必在每个函数中声明gin.Default()
。
func GetMenuRoutes(router *gin.Engine){
menuRoutes := router.Group("/menu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallmenus",middlewares.GetAllMenus)
}
}
return
}
或
您可以使用以下方法将所有这些路由注册到主路由器上 一个for循环。
您的main func()
将包含以下几行
func main() {
v1 := getGroup1().Routes()
v2 := getGroup2().Routes()
rt := gin.Default()
for _,a := range v1 {
{
rt.Handle(a.Method,a.Path,a.HandlerFunc)
}
}
for _,a := range v2 {
{
rt.Handle(a.Method,a.HandlerFunc)
}
}
rt.Run(":8080")
}
,
@ whitespace的答案很好。但是我找到了另一种解决方案。
所以,正如您所记得的,我有很多路由来自2个函数。
我需要合并它们,然后再将它们全部调用
所以我的第一个路由功能来自: menuRoutes.go
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetMenuRoutes return a group of routes for menu
func GetMenuRoutes(router *gin.Engine) *gin.Engine{
menuRoutes := router.Group("/menu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallmenus",middlewares.GetAllMenus)
}
}
return router
}
我的第二条路线功能来自: submenuRoutes.go
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetSubMenuRoutes return a group of routes for submenu
func GetSubMenuRoutes(router *gin.Engine) *gin.Engine{
menuRoutes := router.Group("/submenu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallsubmenus",middlewares.GetAllSubMenus)
}
}
// router.GET("/getallsubmenus",middlewares.GetAllSubMenus)
return router
}
最后,我将两个路由组合并到: main.go
package main
import(
"fmt"
"github.com/IamFrost/api-5/pkg/routes"
"github.com/gin-gonic/gin"
"github.com/gin-contrib/cors"
)
func main(){
fmt.Println("from main")
router := gin.Default()
// router = routes.GetSubMenuRoutes()
routes.GetMenuRoutes(router)
routes.GetSubMenuRoutes(router)
router.Use(cors.Default())
router.Run(":3000")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。