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"
    }

}

 

posted @ 2020-09-02 16:32  欧-阳  阅读(309)  评论(0)    收藏  举报