\'json body could not be decoded: EOF\' after trying to read the request body

分享于2023年02月22日 go graphql 问答
【问题标题】:'json body could not be decoded: EOF' after trying to read the request body\'json body could not be decoded: EOF\' after trying to read the request body
【发布时间】:2023-02-11 01:05:59
【问题描述】:

我编写了一个记录器中间件,用于存储传入的 GraphQL 请求信息。问题是如果我尝试读取请求正文,我会收到以下 400 Bad Request:

{
    "errors": [
        {
            "message": "json body could not be decoded: EOF"
        }
    ],
    "data": null
}

我的代码:

clonedReq := r.Clone(ctx)
data, _ := io.ReadAll(clonedReq.Body)

// store the data...
fmt.Println(string(data))

显示了数据,但我遇到了 EOF 错误。如果我将这部分注释掉,请求将毫无问题地得到响应。

无论是否使用 Clone 请求的深层副本,问题仍然存在。


【解决方案1】:

中间件将请求主体读取到 EOF。处理程序遇到 EOF。请求正文的内容未在 Clone() 中克隆。

要修复代码,请在中间件中恢复请求正文:

  data, _ := io.ReadAll(r.Body)
  r.Body = bytes.NewReader(data)

【讨论】: