1 回答
TA贡献1777条经验 获得超10个赞
这可以通过创建一个自定义函数来实现,该函数将响应对象和代码添加到上下文并在处理程序中调用它;在中间件中,您从上下文中获取此对象,修改响应并调用实际的 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 关注
- 83 浏览
添加回答
举报