Récupération du corps de la requête dans le middleware Go-Gin plusieurs fois
Dans Go-Gin, un framework Web, les développeurs peuvent rencontrer un scénario dans lequel ils besoin de lire le corps d’une demande plusieurs fois. Cela devient nécessaire lorsque les données du corps sont utilisées à des fins de validation et ensuite transmises aux fonctions suivantes.
Une approche pour résoudre ce problème consiste à lire le corps dans une variable avant d'effectuer la validation, puis à restaurer le corps à son état initial. état d'origine avant de passer à la fonction suivante :
func SignupValidator(c *gin.Context) { var bodyBytes []byte var bodyBytesCopy []byte if c.Request.Body != nil { bodyBytes, _ = ioutil.ReadAll(c.Request.Body) } copy(bodyBytesCopy, bodyBytes) // Save body for later use var user entity.User if err := c.ShouldBindJSON(&user); err != nil { // Validation code c.Abort() return } c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytesCopy)) // Restore original body c.Next() }
Cette approche utilise la fonction ioutil.ReadAll pour lire le corps du flux d'origine, puis en crée une copie à utiliser pour la validation. Le corps d'origine est ensuite restauré pour permettre aux fonctions ultérieures d'y accéder.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!