Beego的路由配置

256 阅读3分钟

Beego的路由配置

01、手动路由

1:定义路由

package routers
​
import beego "github.com/beego/beego/v2/server/web"func init() {
    // 用户中心
    beego.CtrlGet("/api/v1/user/get/:id", (*user.UserController).GetUserByID)
    beego.CtrlGet("/api/v1/user/findUser", (*user.UserController).FindUserList)
    // 登录模块
    beego.CtrlPost("/api/v1/login/toLogin", (*login.LoginController).ToLogin)
}
​

2:路由处理方法

登录

package login
​
import beego "github.com/beego/beego/v2/server/web"type LoginController struct {
    beego.Controller
}
​
/**
 * @desc 登录逻辑
 */
func (web *LoginController) ToLogin() {
    web.Data["json"] = "ToLogin"
    web.ServeJSON()
}
​

用户

package user
​
import beego "github.com/beego/beego/v2/server/web"type UserController struct {
    beego.Controller
}
​
/**
 * @desc 根据用户id查询用户信息
 */
func (web *UserController) GetUserByID() {
    web.Data["json"] = "GetUserByID"
    web.ServeJSON()
}
​
/**
 * @desc 查询用户列表
 */
func (web *UserController) FindUserList() {
    web.Data["json"] = "FindUserList"
    web.ServeJSON()
}
​

3:路由初始化main.go中导入的时候,使用_的方式的导入。

import (
    _ "ksd-social-api/routers" /*初始化init方法,路由全部会执行加载到内存中*/
)

4: 查看已注册路由

在main.go中增加如下代码

package main
​
import (
    "fmt"
    beego "github.com/beego/beego/v2/server/web"
    "ksd-social-api/global"
    initilization "ksd-social-api/initlization"
    _ "ksd-social-api/routers"
)
​
func main() {
    //1:记录环境信息
    global.Env = beego.BConfig.RunMode
    //2:设定环境的日志级别,默认是prod环境下的error级别,意思就是:只有程序报错了才会进行日志写入到文件和控制台中。
    loggerLevel := "error"
    // 根据环境来设置日志级别
    if global.Env == "dev" {
        // 如果是开发环境,我们要方便调试我们代码。所以建议使用debug或者info都可以
        loggerLevel = "info"
    }
    //3:解析自定义的配置文件
    initilization.InitMyConfig()
    //4:初始化zap日志
    initilization.InitLogger(loggerLevel)
    //5:初始化redis
    initilization.InitRedis()
    //6: 打印路由信息
    //在开发环境可以使用打印把定义和初始化成功的路由全部打印出来,方便你查询和确认你定义的路由是否生效-=--------新增代码
    if global.Env == "dev" {
        tree := beego.PrintTree()
        methods := tree["Data"].(beego.M)
        for k, v := range methods {
            fmt.Printf("%s => %v\n", k, v)
        }
    }
​
    //7: beego框架的运行和启动
    beego.Run()
}
​

5: 启动运行

image-20230926215934755.png

02、命名空间路由

namespace,也叫做命名空间,是 Beego 提供的一种逻辑上的组织 API 的手段。 大多数时候,我们注册路由的时候,会按照一定的规律组织,那么使用namespace就会使代码更加简洁可维护。

例如,我们整个应用分成两大块,一个是对安卓提供的 API,一个是对 IOS 提供的 API。那么整体上,就可以划分成两个命名空间;有一些应用会有版本概念,比如说早期是 V1,后面引入了 V2,再后来又引入了 V3,那么整个应用就有三个命名空间。不同版本的 API 注册在不同的命名空间之下。

namespace稍微有点复杂,所以你可能需要多写几个简单的demo来掌握它的用法。

1: 使用命名空间的第一种写法

package routers
​
import (
    beego "github.com/beego/beego/v2/server/web"
    "ksd-social-api/controllers/login"
    "ksd-social-api/controllers/user"
)
​
func init() {
    // 命名空间的做法
    ns := beego.NewNamespace("/api/v1",
        // 用户中心
        beego.NSCtrlGet("/user/get/:id", (*user.UserController).GetUserByID),
        beego.NSCtrlGet("/user/findUser", (*user.UserController).FindUserList),
        // 登录模块
        beego.NSCtrlPost("/login/toLogin", (*login.LoginController).ToLogin),
    )
​
    // 命名空间注册
    beego.AddNamespace(ns)
}
​

2: 第二种写法

package routers
​
import (
    beego "github.com/beego/beego/v2/server/web"
    "ksd-social-api/controllers/login"
    "ksd-social-api/controllers/user"
)
​
func init() {
​
    // 命名空间的做法
    ns := beego.NewNamespace("/api/v1",
        // 用户中心--子命名空间
        beego.NSNamespace("/user",
            beego.NSCtrlGet("/get/:id", (*user.UserController).GetUserByID),
            beego.NSCtrlGet("/findUser", (*user.UserController).FindUserList),
        ),
        // 登录模块
        beego.NSCtrlPost("/login/toLogin", (*login.LoginController).ToLogin),
        // 退出登录
        beego.NSCtrlPost("/login/logout", (*login.LoginController).ToLogout),
    )
​
    // 命名空间注册
    beego.AddNamespace(ns)
}
​