路由设置
默认处理函数
beego.Router("/users", &controllers.UserController{})
如上的路由规则,会把/users
的GET、POST等请求方法自动映射到UserController的Get、Post同名函数
自定义处理函数
上面的路由规则默认将请求方法与处理函数做了映射。
当然,我们可以显示地设置将请求路径为/users
,请求方法为get
的HTTP请求,路由到UserController
的List()
函数,而不绑定默认的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?