echo路由及中间件

实例化echo对象

//实例化echo对象。
e := echo.New()
	
//定义post请求, url路径为:/user/create, 绑定createUsers控制器函数
user := e.Group("/user")
user.POST("/create", createUser)

//定义get请求,url路径为:/user/get/:id,绑定getUser控制器函数
user.GET("/get", getUser)

//定义put请求,url路径为:/user/put/:id,绑定updateUser控制器函数
user.PUT("/put/:id", updateUser)

//定义delete请求,url路径为:/user/delete/:id,绑定deleteUser控制器函数
user.DELETE("/delete/:id", deleteUser)

定义结构体

// User 结构体定义
type User struct {
  Name  string `json:"name" form:"name" query:"name"`
  Password string `json:"password" form:"password" query:"password"`
}

定义绑定方法

注意,凡是echo路由绑定的方法参数必须包含echo.Context,返回值必须包含error

  • Bind
import "fmt"

// bind是获取post请求里body中的参数
func createUser(c echo.Context) (err error) {
    user := new(User)
    //调用echo.Context的Bind函数将请求参数和User对象进行绑定。
    if err = c.Bind(user); err != nil {
    	return
    }
  
    //请求参数绑定成功后 user 对象就保存了请求参数。
    //这里直接将请求参数以json格式显示
	fmt.Sprintf("name:%v", user.Name)
	fmt.Sprintf("password:%v", user.Password)
    return c.JSON(http.StatusOK, user)
}
  • QueryParam
// QueryParam是获取url:xxxx:xx/get?name=amber
func getUser(c echo.Context) error {
    //获取name参数, 通过QueryParam获取的参数值也是String类型。
	name := c.QueryParam("name")
	password:= c.QueryParam("password")
	...
	return c.String(http.StatusOK, name)
})

  • Param
// Param是获取url:xxxx:xx/delete/xxxxxxxxxxxxxxxxxxx
func deleteUser(c echo.Context) error {
    //获取name参数, 通过QueryParam获取的参数值也是String类型。
	id := c.Param("id")
	...
	return c.String(http.StatusOK, id)
})
  • Header
// 对于写在header里的参数的获取方式
age := c.Request().Header.Get("age")

设置返回值格式

// json格式,传入的是json的结构体
return c.Json(http.StatusOK, user)

// string格式,传入的是string类型字符串
return c.String(http.StatusOK, id)

获取上传文本文件

// 注册路由
e := echo.New()
e.POST("/upload", uploadFile)


import (
	"io"
	"os"

	"github.com/labstack/echo"
	"github.com/labstack/echo/middleware"
)

func uploadFile(c echo.Context) error {
	
	// 通过FormFile获取客户端上传的文件,这里的参数file是在postman里传入的文件名字,可以改
	userfile, err := c.FormFile("file")
	if err != nil {
		return err
	}
	
	//打开用户上传的文件
	sourcefile, err := userfile.Open()
	if err != nil {
		return err
	}
	defer sourcefile.Close()

	// 创建目标文件,指定将用户文件保存的位置
	// file.Filename 参数创建与用户上传时相同的文件名
	dstfile, err := os.Create(userfile.Filename)
	if err != nil {
		return err
	}
	defer dstfile.Close()

	// 这里将用户上传的文件复制到服务端的目标文件
	if _, err = io.Copy(dstfile, sourcefile); err != nil {
		return err
	}

	return c.String(http.StatusOK, userfile.Filename))
}

中间件

e := echo.New()

//Recover中间件,主要用于拦截panic错误并且在控制台打印错误日志,避免echo程序直接崩溃
e.Use(middleware.Recover())

// Logger中间件,每执行http请求时会打印log信息
e.Use(middleware.Logger())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章