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())

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