路由设置

默认处理函数

beego.Router("/users", &controllers.UserController{})

如上的路由规则,会把/users的GET、POST等请求方法自动映射到UserController的Get、Post同名函数

自定义处理函数

上面的路由规则默认将请求方法与处理函数做了映射。

当然,我们可以显示地设置将请求路径为/users,请求方法为get的HTTP请求,路由到UserControllerList()函数,而不绑定默认的Get()方法。此时,路由规划如下:

beego.Router("/", &controllers.UserController{}, "get:List")

注意:

如果为get方法显示绑定了处理函数,那么该路径的所有方法都要显示绑定,否则会报404。

比如有如下两个API

GET    /users
POST    /users

那么在router中应该也要为post显示设置处理函数post:Post,否则post请求会报404

beego.Router("/users", &controllers.UserController{}, "get:List;post:Post")

正则路由

为了用户更加方便的路由设置,beego 参考了 sinatra 的路由实现,支持多种方式的路由:

  • beego.Router(“/api/?:id”, &controllers.RController{})

    默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”

  • beego.Router(“/api/:id”, &controllers.RController{})

    默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,但URL”/api/“匹配失败

  • beego.Router(“/api/:id([0-9]+)“, &controllers.RController{})

    自定义正则匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”

  • beego.Router(“/user/:username([\w]+)“, &controllers.RController{})

正则字符串匹配 //例如对于URL”/user/astaxie”可以匹配成功,此时变量”:username”值为”astaxie”

  • beego.Router(“/download/.”, &controllers.RController{})

    匹配方式 //例如对于URL”/download/file/api.xml”可以匹配成功,此时变量”:path”值为”file/api”, “:ext”值为”xml”

  • beego.Router(“/download/ceshi/*“, &controllers.RController{})

    全匹配方式 //例如对于URL”/download/ceshi/file/api.json”可以匹配成功,此时变量”:splat”值为”file/api.json”

  • beego.Router(“/:id:int”, &controllers.RController{})

    int 类型设置方式,匹配 :id为int 类型,框架帮你实现了正则 ([0-9]+)

  • beego.Router(“/:hi:string”, &controllers.RController{})

    string 类型设置方式,匹配 :hi 为 string 类型。框架帮你实现了正则 ([\w]+)

  • beego.Router(“/cms_:id([0-9]+).html”, &controllers.CmsController{})

带有前缀的自定义正则 //匹配 :id 为正则类型。匹配 cms_123.html 这样的 url :id = 123

可以在 Controller 中通过如下方式获取上面的变量:

this.Ctx.Input.Param(":id")
this.Ctx.Input.Param(":username")
this.Ctx.Input.Param(":splat")
this.Ctx.Input.Param(":path")
this.Ctx.Input.Param(":ext")

Last updated

Was this helpful?