go

go


第十二单元(Beego框架路由)

<h1>beego 路由配置</h1> <pre><code>从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由,应用中的大多数路由都会定义在 `routers/router.go` 文件中。最简单的 beego 路由由 URI 和闭包函数组成。</code></pre> <h3>1.1 基本GET路由</h3> <pre><code>package routers import ( "beetest/controllers" "github.com/astaxie/beego" "github.com/astaxie/beego/context" ) func init() { beego.Get("/hello", func(ctx *context.Context) { ctx.Output.Body([]byte("hello world")) }) }</code></pre> <h3>1.2 基本 POST 路由</h3> <pre><code>beego.Post("/alice",func(ctx *context.Context){ ctx.Output.Body([]byte("bob")) }) beego.Router("/test/:id", &amp;controllers.TestController{}, "post:Post") func (this *TestController) Post() { id := this.Ctx.Input.Param(":id") this.Ctx.WriteString(id) }</code></pre> <h3>1.3 注册一个可以响应任何 HTTP 的路由</h3> <pre><code>beego.Any("/foo",func(ctx *context.Context){ ctx.Output.Body([]byte("bar")) })</code></pre> <h3>1.4 路由自动匹配</h3> <pre><code>beego.AutoRouter(&amp;controllers.ObjectController{}) 用户首先需要把需要路由的控制器注册到自动路由中: beego.AutoRouter(&amp;controllers.ObjectController{}) 那么 beego 就会通过反射获取该结构体中所有的实现方法,你就可以通过如下的方式访问到对应的方法中: /object/login 调用 ObjectController 中的 Login 方法 /object/logout 调用 ObjectController 中的 Logout 方法</code></pre> <h3>1.5 正则路由</h3> <pre><code>### 2.2.3 正则路由 为了用户更加方便的路由设置,beego 参考了 sinatra 的路由实现,支持多种方式的路由: - beego.Router(“/api/?:id”, &amp;controllers.RController{}) 默认匹配 例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123” - beego.Router(“/api/:id”, &amp;controllers.RController{}) 默认匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123”,但URL”/api/“匹配失败 - beego.Router(“/api/:id([0-9]+)“, &amp;controllers.RController{}) 自定义正则匹配 //例如对于URL”/api/123”可以匹配成功,此时变量”:id”值为”123” - beego.Router(“/user/:username([\\w]+)“, &amp;controllers.RController{}) 正则字符串匹配 //例如对于URL”/user/astaxie”可以匹配成功,此时变量”:username”值为”astaxie” - beego.Router(“/download/*.*”, &amp;controllers.RController{}) *匹配方式 //例如对于URL”/download/file/api.xml”可以匹配成功,此时变量”:path”值为”file/api”, “:ext”值为”xml” - beego.Router(“/download/ceshi/*“, &amp;controllers.RController{}) *全匹配方式 //例如对于URL”/download/ceshi/file/api.json”可以匹配成功,此时变量”:splat”值为”file/api.json” - beego.Router(“/:id:int”, &amp;controllers.RController{}) int 类型设置方式,匹配 :id为int 类型,框架帮你实现了正则 ([0-9]+) - beego.Router(“/:hi:string”, &amp;controllers.RController{}) string 类型设置方式,匹配 :hi 为 string 类型。框架帮你实现了正则 ([\w]+) - beego.Router(“/cms_:id([0-9]+).html”, &amp;controllers.CmsController{}) 带有前缀的自定义正则 //匹配 :id 为正则类型。匹配 cms_123.html 这样的 url :id = 123 </code></pre> <pre><code>可以在 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")</code></pre> <pre><code></code></pre> <h3>2.2.4 路由命名空间</h3> <pre><code>ns := beego.NewNamespace("/v1", beego.NSNamespace("/shop", beego.NSGet("/:id", func(ctx *context.Context) { ctx.Output.Body([]byte("shopinfo")) }), ), beego.NSNamespace("/order", beego.NSGet("/:id", func(ctx *context.Context) { ctx.Output.Body([]byte("orderinfo")) }), ), beego.NSNamespace("/crm", beego.NSGet("/:id", func(ctx *context.Context) { ctx.Output.Body([]byte("crminfo")) }), ), )</code></pre> <pre><code> &gt; 请求URL ​GET /v1/shop/13 ​GET /v1/order/123 ​GET /v1/crm/123</code></pre>

页面列表

ITEM_HTML