摘要;Beego脱坑(三)Router - Go语言中文网 - Golang中文社区
1.示例代码
app01/main.go
package main
import (
"github.com/astaxie/beego"
_ "app01/router" // 初始化路由
)
func main() {
beego.Run()
}
app01/router/route.go
package router
import (
"github.com/astaxie/beego"
"app01/controller"
)
func init() {
// ProductList视图函数
beego.Router("/hello", &controller.ProductController{}, "*:ProductList") // * 允许所有方法
}
app01/controller/pro.go
package controller
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/logs"
)
type ProductController struct {
beego.Controller // 继承,特定写法
}
func (p *ProductController) ListProduct() {
pmode := mode.NewProMode()
product, err := pmode.GetProList()
if err != nil {
logs.Warn("get product list failed, err: %v", err)
return
}
p.Data["product_list"] = product // 返回前端数据
// html
p.TplName = "produc/list.html"
p.Layout = "layout/lay.html"
}
2.路由类型:基础路由
// 基础路由中的post方法
beego.Post("/post", func(this *context.Context) {
beego.Info("基础路由中的post方法")
this.Output.Body([]byte("基础路由中的post方法"))
})
3.路由类型:固定路由
routers.go
func init() {
// 固定路由
beego.Route("/GetInfo", &controllers.MainController{}) // 自定义结构体MainController
}
controllers.go
type MainController struct {
beego.Controller
}
func (this *MainController) Post() {
beego.Info("固定路由post方法")
this.Ctx.Output.Body("固定路由post方法")
}
func (this *MainController) Get() {
}
func (this *MainController) Delete() {
}
...
4.路由类型:正则路由
routers.go
func init() {
// 正则路由
// * 全匹配
beego.Route("/*", &controllers.RegController{}) // 自定义结构体RegController
// :id 变量匹配
beego.Route("/getUser/:id", &controllers.RegController{})
// 正则表达式 匹配
beego.Route("/getUser/:name([0-9]+)", &controllers.RegController{}) // 一次或多次,且自能包含0-9
// *.* 匹配静态资源
// 例如:http://localhost:8080/upload/file/img/hello.jpg
beego.Route("/upload/*.*", &controllers.RegController{})
// :int 类型匹配
beego.Route("/getUser/:id:int", &controllers.RegController{})
// :string 类型匹配
beego.Route("/getUser/:name:string", &controllers.RegController{})
}
controllers.go
type RegController struct {
beego.Controller
}
func (this *RegController) Post() {
beego.Info("正则匹配路由实现")
id := this.Ctx.Input.Param(":id")
this.Ctx.ResponseWrite.Write([]byte("Id:"+id))
}
func (this *RegController) Get() {
// *.* 匹配获取参数是固定写法
path := this.Ctx.Input.Param(":path")
ext:= this.Ctx.Input.Param(":ext")
this.Ctx.ResponseWrite.Write([]byte("path :"+path + "ext:" + ext))
}
func (this *RegController) Delete() {
}
...
5.路由类型:自定义路由
routers.go
func init() {
// 自定义路由
beego.Route("/GetInfo", &controllers.MainController{}, "GET:GetUserInfo") // GET方法
beego.Route("/registerInfo", &controllers.MainController{}, "GET:RegisterUserInfo") // POST方法
}
controllers.go
type CustomController struct {
beego.Controller
}
func (this *RegController) GetUserInfo() {
name:= this.GetString("userName")
this.Ctx.Output.Body([]byte("获取数据:"+name))
}
func (this *RegController) RegisterUserInfo() {
name:= this.GetString("userName")
this.Ctx.Output.Body([]byte("获取数据:"+name))
}