beego路由设置

固定路由

使用实例

    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)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页