go语言web开发06 - beego路由设置
beego里路由的种类分为三种:
- 固定路由
- 正则路由
- 自动路由
三种路由可以指定处理请求的方法,具体看下面例子。
一、固定路由
1.1、路由配置
beego.Router("/test", &controllers.TestController{}) // 第一个参数是请求的路径,第二个参数是路径对应的处理controller
1.2、路由对应的controller
package controllers import ( "github.com/astaxie/beego" ) type TestController struct { beego.Controller } // Get方法处理get请求,Post方法处理post请求 func (c *TestController) Get() { c.Data["Website"] = "uxuan.cc" c.Data["Email"] = "dream@uxuan.cc" c.TplName = "index.html" // 指定模板 }
二、正则路由
1、beego.Router("/api/?:id", &controller.ApiController{}) // 有?时,/api/后面跟不跟参数都可以正常访问/api/路径(有参数时后端获取参数,没参数时获取的就是空值) 2、beego.Router("/api/:id", &controller.ApiController{}) // 没有?时,/api/后面必须跟路径参数,如果不跟参数直接访问/api/路径就会报错。 3、beego.Router("/api/:id:int", &controller.ApiController{}) // 没有?时,/api/后面必须跟参数,如果不跟参数就会报错,/api/:id:int:表示限制参数必须是int类型的参数,如果访问的是字符串类型的参数就会报错 4、其他正则路由配置: "/api/:id([0-9]+)" == "/api/:id([\d]+)" == "/api/:id:int":这三种写法的效果是一样的,都是获取int类型的参数 "/api/:username([\w]+)" == "/api/:username:string":这两种的写法效果是一样的,都是获取字符串类型数据
三、自动路由
注册路由的时候不需要指定url,只需要注册控制器即可
beego.AutoRoute(&controller.AutoController{}) // 自动匹配路径 // 使用的时候得按照规则来:/控制器名/方法名/后面全是参数,例如:/user/get/123/456 --> 会访问UserController下得get方法,两个参数是123,456
四、自定义方法
4.1、路由设置
1、beego.Router("/params/:id([0-9]+)", &controller.ParamsController{}, "get:Get1") // 最后一个参数指定请求对应的处理方法,本示例:get请求用Get1方法处理 2、beego.Router("/params/:id([0-9]+)", &controller.ParamsController{}, "get,post:Get1") // 最后一个参数指定请求对应的处理方法,本示例:get请求和post请求都用Get1方法处理 3、beego.Router("/params/:id([0-9]+)", &controller.ParamsController{}, "get:Get1;post:Get2") // 最后一个参数指定请求对应的处理方法,本示例:get请求的处理方法是Get1方法、post请求的处理方法是Get2方法 4、beego.Router("/params/:id([0-9]+)", &controller.ParamsController{}, "*:All") // 最后一个参数指定请求对应的处理方法,本示例:*表示所有,即所有的请求方法都交给All方法处理
4.2、get和post请求都交给Get方法处理示例
1、路由配置
beego.Router("/test_router/?:id:int", &controllers.RouterController{}, "get,post:Get")
2、controoler内容如下
package controllers import ( "github.com/astaxie/beego" ) type RouterController struct { beego.Controller } // Get方法 func (c *RouterController) Get() { // 通过c.Ctx.Request.Method 判断请求的方法做对应的处理 if c.Ctx.Request.Method == "POST" { // POST请求的处理逻辑 // c.StopRun() // c.StopRun():终止逻辑(不继续向下执行),用于认证出错或者其他出错时 c.TplName = "test_router_post.html" } else if c.Ctx.Request.Method == "GET" { // GET请求的处理逻辑 c.TplName = "test_router_get.html" } }