4.1. 路由

未匹配的标注

简介

gin 框架创建简单路由方式很简单, 只需要三步即可:

router := gin.Default()

router.GET("/someGet", getting)

router.Run()

路由分包管理

但是项目中有成百上千条的路由都放在一起的话 那这绝对是一个很糟糕的事情; 所以 gin-pro 把路由模块分成一个app.go核心文件和按照业务版本区分的业务路由包, 这样在业务路由包内就可以写出更足够清晰的代码

├── routers        
│   ├── open    
│   │  └── demo.go
│   ├── web    
│   │  └── user.go
│   └── app.go

routers/open/demo.go文件中, 建立LoadDemoRouter(e *gin.Engine)函数, 在函数内部规划业务路由包内的路由代码

func LoadDemoRouter(e *gin.Engine) {

  e.GET("/index", open.NewDemoController().Index)

}

最后在routers/app.go注册

func registerRouter(e *gin.Engine) {

    open.LoadDemoRouter(e)

}

这样规划出来的路由代码, 完全足够清晰, app.go不仅区分开发/生产场景启动不同路由引擎, 还加载全部模版文件, 所以在业务路由包内不必关心是前后端分离的路由还是api路由

路由组

首先我们从open/demo.go 开始:
定义一个路由分组只需要在我们的路由前添加Group方法即可

e.Group 下的大括号只有分块代码作用 没有实际执行意义

func LoadDemoRouter(e *gin.Engine) {

    d := e.Group("/open/demo")
    {
        d.GET("/index", open.NewDemoController().Index)

        d.POST("/index", open.NewDemoController().Index)
    }
}

路由中间件

实现路由中间件, 首先需要定义一个func(*Context)函数作为中间件参数, 通常放在
app/http/validator下, 具体写法这里不做过多介绍, 参考中间件章节, 路由使用Use方法即可实现中间件过滤

func LoadDemoRouter(e *gin.Engine) {

    d := e.Group("/open/demo").Use(cors.Next())
    {
        d.GET("/index", open.NewDemoController().Index)

        d.POST("/index", open.NewDemoController().Index)
    }
}

路由参数验证器

gin-pro路由使用验证器也十分简单, 只需要在控制器前加上验证器方法即可, GET支持多参数 , 本质上都是func(*Context) , 把验证器方法放在前面作为验证过滤作用 , 控制器放在最后作为返回response的终止方法 ; 或许这不是官方推荐的方法, 但是是我认为这是最爽的解决方案; 当然你也可以不使用这种方法,在控制器内部统一验证

func LoadDemoRouter(e *gin.Engine) {

    d := e.Group("/open/demo").Use(cors.Next())
    {
        // demo.NewIndexValidator().CheckParams 为验证器
        // open.NewDemoController().Index 为控制器
        d.GET("/index", demo.NewIndexValidator().CheckParams, open.NewDemoController().Index)
    }
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~