首页 >后端开发 >Golang >如何在 Go-chi HTTP 中间件处理程序中重用请求主体?

如何在 Go-chi HTTP 中间件处理程序中重用请求主体?

Barbara Streisand
Barbara Streisand原创
2024-12-20 13:32:09932浏览

How Can I Reuse Request Bodies in Go-chi HTTP Middleware Handlers?

确定 HTTP 中间件处理程序中的请求正文可重用性

在这种情况下,当尝试在 Go 中的另一个方法中重用一个方法时会出现问题-chi HTTP 路由器。外部处理程序 Registration() 使用 ioutil.ReadAll(r.Body) 读取请求正文,不留下任何数据可供内部处理程序 Create() 解析 JSON。

解决方案:恢复请求正文

要解决此问题,请执行以下操作修复:

func Registration(w http.ResponseWriter, r *http.Request) {
    b, err := io.ReadAll(r.Body) 
    // ...other code
    r.Body = io.NopCloser(bytes.NewReader(b))
    user.Create(w, r)
}

以下是此代码解决问题的方法:

  • io.ReadAll(r.Body):读取整个请求body.
  • io.NopCloser(bytes.NewReader(b)):通过从之前读取的数据创建 io.Reader 来恢复请求正文。
  • r.Body = io.NopCloser(...):用恢复后的 r.Body 替换原来的 r.Body body.

这样,内部处理程序就可以从请求正文中访问 JSON 数据,而不会遇到“unexpected end of JSON input”错误。

以上是如何在 Go-chi HTTP 中间件处理程序中重用请求主体?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn