为了账号安全,请及时绑定邮箱和手机立即绑定

我有一个中间件链,但 Request BODY 与第一个

我有一个中间件链,但 Request BODY 与第一个

Go
手掌心 2022-05-05 16:13:58
我有 2 个中间件和最终的 HandleFunc。但 Request.Body 仅适用于第一个中间件。当第二个开始时,身体是空的。会发生什么?这是我对路线的呼吁。router.HandleFunc("/registro", middleW.Validaciones(middleW.UsuarioYaExiste(routes.Registro))).Methods("POST")第一个中间件是func Validaciones (next http.HandlerFunc) http.HandlerFunc {    return func(w http.ResponseWriter, r *http.Request)  {        if bd.ChequeoConnection()==0 {           http.Error(w,"Conexión Perdida con la Base de Datos",500)           return        }         var t models.Usuario        err := json.NewDecoder(r.Body).Decode(&t)        http.Error(w,"Nombre "+t.Nombre+" - Email "+t.Email+" - Password "+t.Password, 400)        if err != nil {            mensaje:="Validaciones : Usuario y/o Contraseña inválidos <br> Password ="+t.Password+"<br>Email = "+t.Email+"<br>Nombre = "+t.Nombre            http.Error(w, mensaje, 400)            return        }        if len(t.Email)==0 {            http.Error(w, "El email de usuario es requerido", 400)            return        }        if len(t.Password)<6 {            http.Error(w, "Debe especificar una contraseña de al menos 6 caracteres", 400)            return        }        /* si todo estuvo OK devuelve la función de la Ruta */        next.ServeHTTP(w, r)    }}这是第二个中间件func UsuarioYaExiste (next http.HandlerFunc) http.HandlerFunc {    return func(w http.ResponseWriter, r *http.Request)  {        var t models.Usuario        err := json.NewDecoder(r.Body).Decode(&t)        http.Error(w,"Nombre 1ro. "+t.Nombre+" - Email "+t.Email+" - Password "+t.Password, 400)        if err != nil {            mensaje:="UsuarioYaExiste : Usuario y/o Contraseña inválidos <br> Password ="+t.Password+"<br>Email = "+t.Email+"<br>Nombre = "+t.Nombre            http.Error(w, mensaje, 400)            return        }    }}在这第二个中间件中,这一行http.Error(w,"Nombre 1ro. "+t.Nombre+" - Email "+t.Email+" - Password "+t.Password, 400)显示空值,但不在第一个中间件中。
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

HTTP 请求体是一个流,你只能读取一次。您的第一个中间件读取正文,因此您的第二个中间件没有任何内容。

验证中间件中的主体可能不是您尝试做的最佳解决方案。我建议您删除中间件,解组处理程序中的主体,并将中间件重构为实用程序函数,您可以将解组消息传递到该实用程序函数中,以便它可以做它需要做的事情。


查看完整回答
反对 回复 2022-05-05
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信