1 回答

TA貢獻1777條經(jīng)驗 獲得超10個贊
這可以通過創(chuàng)建一個自定義函數(shù)來實現(xiàn),該函數(shù)將響應對象和代碼添加到上下文并在處理程序中調(diào)用它;在中間件中,您從上下文中獲取此對象,修改響應并調(diào)用實際的 c.JSON,它將修改后的響應寫入線路。
const (
echoCtxRespKey = "echo_ctx_resp_key"
)
type RespObject struct {
Message string `json:"message"`
}
type Response struct {
Data interface{}
Code int
}
func main() {
e := echo.New()
e.GET("/hello", handler, middle)
e.Logger.Fatal(e.Start(":3000"))
}
func handler(c echo.Context) error {
resp := RespObject{
Message: "Hello",
}
addResponseToContext(c, Response{
Data: resp,
Code: http.StatusOK,
})
return nil
}
func middle(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
next(c)
resp := getResponseFromContext(c)
// modify resp
return c.JSON(resp.Code, resp.Data)
}
}
func addResponseToContext(c echo.Context, response Response) {
c.Set(echoCtxRespKey, response)
}
func getResponseFromContext(c echo.Context) Response {
return c.Get(echoCtxRespKey).(Response)
}
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報