首页 > 解决方案 > 使用 SuperGraph 作为库的 JSON 响应中的“数据”字段

问题描述

使用SuperGraph作为库,我发现 JSON 响应不是以:"data".

例子:

{
  "players": [...]
}

代替:

{
  "data": {
    "players": [...]
  }
}

我正在使用这段代码:

func main() {
    sg, err := core.NewSuperGraph(nil, sb)

    r := chi.NewRouter()

    r.Group(func(r chi.Router) {
        r.Post(config.ApiEndpoint, myHandler(sg))
    })

    StartServer(r)
}

type reqBody struct {
    Query string `json:"query"`
}

func sgHandler(sg *core.SuperGraph, next http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        var rBody reqBody
        bodyBytes, _ := ioutil.ReadAll(r.Body)
        _ = r.Body.Close(
        r.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
        err := json.NewDecoder(bytes.NewBuffer(bodyBytes)).Decode(&rBody)
        if err != nil {
            http.Error(w, "Error parsing JSON request body", 400)
        }

        res, err := sg.GraphQL(ctx, rBody.Query, nil)
        if err == nil {
            result, _ := json.Marshal(res.Data) // IS THIS WRONG?
            _, err = w.Write(result)
        }
    }
}

是我的错吗?

这是错的吗?result, _ := json.Marshal(res.Data)?

也许我需要全部元帅res?不是更重吗?

标签: jsonhttpgoencoding

解决方案


推荐阅读