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: 启动运行
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)
}