固定路由
使用实例
beego.Router("/hello", &controllers.HelloController{})
package controllers
import "github.com/astaxie/beego"
type HelloController struct {
beego.Controller //继承beego.Controller
}
// 重写Get方法
func (hello *HelloController) Get() {
hello.Ctx.WriteString("hello world")
}
基础路由
使用实例:
// 基础路由
beego.Get("/get_router", func(ctx *context.Context) {
ctx.Output.Body([]byte("get route"))
})
beego.Post("/post_router", func(ctx *context.Context) {
ctx.Output.Body([]byte("POST route"))
})
所有的支持的基础函数如下所示
beego.Get(router, beego.FilterFunc)
beego.Post(router, beego.FilterFunc)
beego.Put(router, beego.FilterFunc)
beego.Patch(router, beego.FilterFunc)
beego.Head(router, beego.FilterFunc)
beego.Options(router, beego.FilterFunc)
beego.Delete(router, beego.FilterFunc)
beego.Any(router, beego.FilterFunc)
RESTful Controller 路由
使用实例:
//自定义方法及RESTful 规则
beego.Router("/api/list",&controllers.APIController{},"*:ListApis")
beego.Router("/api/create",&controllers.APIController{},"post:CreateApi")
beego.Router("/api/update",&controllers.APIController{},"put:UpdateApi")
beego.Router("/api/delete",&controllers.APIController{},"delete:DeleteApi")
package controllers
import "github.com/astaxie/beego"
type APIController struct {
beego.Controller
}
func (api *APIController ) ListApis() {
api.Ctx.WriteString("ListApis")
}
func (api *APIController ) UpdateApi() {
api.Ctx.WriteString("UpdateApi")
}
func (api *APIController ) DeleteApi() {
api.Ctx.WriteString("DeleteApi")
}
func (api *APIController ) CreateApi() {
api.Ctx.WriteString("CreateApi ")
}
正则路由
为了用户更加方便的路由设置,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
使用实例:
// 正则路由
beego.Router("/Api/?:version", &controllers.RegController{})
package controllers
import "github.com/astaxie/beego"
type RegController struct {
beego.Controller
}
func (reg *RegController) Get() {
version := reg.Ctx.Input.Param(":version")
reg.Ctx.WriteString("version="+version+"\n")
}
自动匹配
// 自动匹配
beego.AutoRouter(&controllers.APIController{})
注解路由
使用实例:
package controllers
import "github.com/astaxie/beego"
type CMSController struct {
beego.Controller
}
func (cms *CMSController) URLMapping() {
cms.Mapping("AllBlock", cms.AllBlock)
}
// @router /all [get]
func (cms *CMSController) AllBlock() {
cms.Ctx.WriteString("注册路由")
}
//注解路由
beego.Include(&controllers.CMSController{})
注意
只会在 dev 模式下进行生成,生成的路由放在 “/routers/commentsRouter.go” 文件中
namespace
namespace的接口支持如下:
NewNamespace(prefix string, funcs …interface{}) :初始化 namespace 对象,下面这些函数都是 namespace 对象的方法,但是强烈推荐使用 NS 开头的相应函数注册,因为这样更容易通过 gofmt 工具看的更清楚路由的级别关系
NSCond(cond namespaceCond) :支持满足条件的就执行该 namespace, 不满足就不执行
NSBefore(filiterList …FilterFunc)
NSAfter(filiterList …FilterFunc) : 上面分别对应 beforeRouter 和 FinishRouter 两个过滤器,可以同时注册多个过滤器
NSInclude(cList …ControllerInterface)
NSRouter(rootpath string, c ControllerInterface, mappingMethods …string)
NSGet(rootpath string, f FilterFunc)
NSPost(rootpath string, f FilterFunc)
NSDelete(rootpath string, f FilterFunc)
NSPut(rootpath string, f FilterFunc)
NSHead(rootpath string, f FilterFunc)
NSOptions(rootpath string, f FilterFunc)
NSPatch(rootpath string, f FilterFunc)
NSAny(rootpath string, f FilterFunc)
NSHandler(rootpath string, h http.Handler)
NSAutoRouter(c ControllerInterface)
NSAutoPrefix(prefix string, c ControllerInterface)
NSNamespace(prefix string, params …innnerNamespace) 嵌套其他 namespace
使用实例:
package controllers
import "github.com/astaxie/beego"
type NodeController struct {
beego.Controller
}
func (node *NodeController) CreateNode() {
node.Ctx.WriteString("create node!!")
}
func (node *NodeController) DeleteNode() {
node.Ctx.WriteString("delete node!!")
}
func (node *NodeController) ReadNode() {
node.Ctx.WriteString("read node!!")
}
func (node *NodeController) UpdateNode() {
node.Ctx.WriteString("update node!!")
}
//namespace
ns :=
beego.NewNamespace("/v1",
beego.NSNamespace("/read",
beego.NSRouter("/node", &controllers.NodeController{},"get:ReadNode"),
),
)
//注册 namespace
beego.AddNamespace(ns)