beego controller层开发

目标

  • 演示beego接收http请求并解析数据返回数据。
  • 演示beego路由功能

注:使用的是beego 2.0之后的版本

创建项目

bee new beego_controller

修改配置文件

设置CopyRequestBody

appname = beego_controller
httpport = 8080
runmode = dev

# 是否允许在 HTTP 请求时,返回原始请求体数据字节,默认为 false
# 不配置获取不到body里面的数据
CopyRequestBody = true

controller

在controller 文件夹下面新建test_controller.go

package controllers

import (
	beego "github.com/beego/beego/v2/server/web"
	"github.com/tidwall/gjson"
	"github.com/beego/beego/v2/core/logs"
	"strconv"
)

type TestController struct{
	beego.Controller
}

func (c *TestController) GetUser(){
	//Getxxx()和Input()都可以获取参数
	name := c.GetString("name")
	value ,_:= c.Input()
	age:=value.Get("age")
	logs.Info("name:"+name+",age:"+age)
	c.Ctx.WriteString("name:"+name+",age:"+age)
}

//如果要忽略一个字段,有两种办法,一是:字段名小写开头,二是:form 标签的值设置为 -
// 结构体属性必须大写不然解析不到
type User struct {
	Id int `form:"-"`
	Name  string `form:"username"`
	Age   int    `form:"age"`
}

func (c *TestController) GetForm(){
	//Getxxx()和Input()也可以一个一个获取表单数据
	//beego 提供了通过另外一个更便捷的方式,就是通过 struct
	// 的字段名或 tag 与表单字段对应直接解析到 struct。
	u :=User{}
	err := c.ParseForm(&u)
	if err !=nil{
		logs.Error(err.Error())
	}
	logs.Info("name:"+u.Name+",age:"+strconv.Itoa(u.Age))
	c.Ctx.WriteString("name:"+u.Name+",age:"+strconv.Itoa(u.Age))
}
type HTTP_INFO struct{
	Status int `json:"status"`		//返回状态 0: 成功 -1:失败
	Msg string `json:"msg"` //返回信息
}

//解析json数据并返回json数据
func (c *TestController) GetJson(){
	logs.Info(string(c.Ctx.Input.RequestBody))
	//解析json数据
	name:=gjson.Get(string(c.Ctx.Input.RequestBody),"name").String()
	age:=gjson.Get(string(c.Ctx.Input.RequestBody),"age").String()

	//返回json数据
	_data :=HTTP_INFO{Status:200,Msg:"get json success"}
	c.Data["json"] =_data
	logs.Info("name:"+name+",age:"+age)
	c.ServeJSON(false)
}
  • GetUser: 演示从参数中获取数据
  • GetForm:演示从表单中获取数据
  • GetJson: 演示从json中获取数据

routers

修改router.go

package routers

import (
	"beego_controller/controllers"
	beego "github.com/beego/beego/v2/server/web"
)

func init() {
	//自定义方法,chulejiekou
	beego.Router("/getUser",&controllers.TestController{},"get:GetUser")
	//尝试用get传表单没有解析到,改成了post方法
	beego.Router("/getForm",&controllers.TestController{},"post:GetForm")
	beego.Router("/getJson",&controllers.TestController{},"post:GetJson")
	//全匹配路由(固定路由)
	beego.Router("/", &controllers.MainController{})
}

只要不是实现beego.Controller中的 ControllerInterface接口里的函数,都需要自定义方法,不然路由找不到对应的方法。

122

运行

bee run

123

125

124

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×