Echo 框架:
1. 定义一个 errors package:
package errors
import (
"fmt"
"net/http"
"
github.com/labstack/echo/v4"
)
func ERROR(err error, c echo.Context) {
code := http.StatusInternalServerError
message := "Internal Server Error"
if he, ok := err.(*echo.HTTPError); ok {
code = he.Code
message = fmt.Sprint(he.Message)
}
_ = c.JSON(code, echo.Map{
"success": false,
"message": message,
})
}
2. 将 ERROR 函数指定为 Echo 的统一处理函数:
package main
e := echo.New()
e.HTTPErrorHandler = errors.ERROR
3. 在任意 handler 返回 err:
func (h *Handler) createCluster(c echo.Context) error {
payload := &ClusterPayload{}
err := c.Bind(payload)
if err != nil {
return echo.NewHTTPError( http.StatusBadRequest, err.Error())
}
if err := payload.validate(); err != nil {
return echo.NewHTTPError( http.StatusBadRequest, err.Error())
}
cluster, err := h.service.CreateCluster(c.Request().Context(), payload)
if ent.IsConstraintError(err) {
return echo.NewHTTPError( http.StatusBadRequest, err.Error())
}
if err != nil {
fmt.Println(err)
return echo.ErrInternalServerError
}
return c.JSON( http.StatusOK, echo.Map{
"success": true,
"data": cluster,
})
}