第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在單個入口點中自定義來自兩個處理程序的響應數(shù)據(jù)?

如何在單個入口點中自定義來自兩個處理程序的響應數(shù)據(jù)?

Go
蠱毒傳說 2023-02-06 19:34:45
我在我的應用程序中使用 echo 框架,我遇到了在單個入口點上構造來自兩個處理程序的響應的問題。有示例代碼type RespObject struct {    Message string `json:"message"`}func main() {    e := echo.New()    e.GET("/hello", handler, middle)    e.Logger.Fatal(e.Start(":3000"))}func handler(c echo.Context) error {    return c.JSON(http.StatusOK, RespObject{        Message: "Hello",    })}func middle(next echo.HandlerFunc) echo.HandlerFunc {    return func(c echo.Context) error {        c.JSON(http.StatusOK, RespObject{            Message: "World",        })        return next(c)    }}請求后我得到curl localhost:3000/hello{"message":"World"}{"message":"Hello"}我的目標是做出回應{"message":"Hello World"}echo.Context 具有帶有實現(xiàn) ResponseWriter 的結構 Response但似乎 ResponseWriter 是 WriteOnly 合同。有沒有辦法在 ResponseWriter 中擦除和重建數(shù)據(jù)?據(jù)我所知有兩個問題通過“中間”處理程序后從 ResponseWriter 讀取數(shù)據(jù)。擦除 ResponseWriter 中的數(shù)據(jù)并在“處理程序”處理程序中寫入新數(shù)據(jù)在實際問題中,結構的名稱沖突是沒有必要的。它在兩個不同的 SCIM API 中請求并做出組合響應。
查看完整描述

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)

}


查看完整回答
反對 回復 2023-02-06
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號