小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 在beego框架中,支持四种路由设置,他们分别是:基础路由,固定路由,正则路由和自动路由。
基础路由:
直接通过beego.Get,beego.POST,beego.Head,beego.Delete等方法来进行路由的映射,我们通过代码给大家来进行演示。我们知道,常见的http请求方法操作有:GET,HEAD,PUT,POST,DELETE,OPTIONS等。
-
GET路由 首先是基础的GET路由。下面我们通过例子来向大家进行展示。
beego.GET("",func) 复制代码
-
POST路由:
beego.POST("",func) 复制代码
-
除此之外,还支持Patch,Head,Delete等基础路由。
以上这种请求和对应找到请求方法类型的方式就是RESTful形式,我们最常用的也是RESTful形式 RESTful是目前开发API中非常常用的一种形式,其实就是RESTful形式就是用户是get请求时就自动执行Get方法,Post请求就执行Post方法。
固定路由:
诸如以下此种代码形式:
beego.Router("/",controller);
复制代码
Get请求就会对应到Get方法,Post就会对应到Post方法,Delete就会对应到Delete方法,Header方法就会对应Header方法。
正则路由:
正则路由是指可以在进行固定路由的基础上,支持匹配一定格式的正则表达式。比如:id,:username,自定义正则,file的路径和后缀切换以及全匹配等操作。
自定义路由
上面两种路由都是默认的根据请求的类型,Get就执行Get方法,Post执行Post方法,比较局限。因为在开发的时候大部分都是使用固定匹配想要直接执行对应的逻辑控制方法,因此beego提供给我们了可以自定义的自定义路由配置。方式如下:
beego.Router("/",&IndexController{},"")
复制代码
可以用的HTTP Method:
- "*":包含以下所有的函数
- "get":GET 请求
- "post":POST 请求
- "put":PUT 请求
- "delete":DELETE 请求
- "patch":PATCH 请求
- "options":OPTIONS 请求
- "head":HEAD 请求
上面这些对应的请求方法,在beego.Controller中,定义了很多的方法,比如Init,Prepare,Post,Get,Head,Delete等方法。以上分析的是beego框架的Router以及Controller运行逻辑。
路由组
示例:
func init() {
//含义说明https://beego.me/docs/mvc/controller/router.md
ns := beego.NewNamespace("/v1",
beego.NSRouter("/home", &controllers.UserController{}, "post:GetAll"), //http://localhost:8080/v1/home
beego.NSNamespace("/object2",
beego.NSRouter("/home2", &controllers.UserController{}, "get:Get"), //http://localhost:8080/v1/object2/home2?uid=asdf
),
)
beego.AddNamespace(ns)
// 添加日志拦截器
var FilterLog = func(ctx *context.Context) {
url, _ := json.Marshal(ctx.Input.Data()["RouterPattern"])
params, _ := json.Marshal(ctx.Request.Form)
outputBytes, _ := json.Marshal(ctx.Input.Data()["json"])
divider := " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
topDivider := "┌" + divider
middleDivider := "├" + divider
bottomDivider := "└" + divider
outputStr := "\n" + topDivider + "\n│ 请求地址:" + string(url) + "\n" + middleDivider + "\n│ 请求参数:" + string(params) + "\n│ 返回数据:" + string(outputBytes) + "\n" + bottomDivider
logs.Info(outputStr)
}
// 最后一个参数必须设置为false 不然无法打印数据
//以下配置http://localhost:8080/v1/home则不会输出日志,http://localhost:8080/v1/object2/home2这个地址会输出日志
beego.InsertFilter("*/home2", beego.FinishRouter, FilterLog, false)
}
复制代码