Maison >développement back-end >Golang >Comment puis-je lire le corps de la requête plusieurs fois dans le middleware Go-Gin ?

Comment puis-je lire le corps de la requête plusieurs fois dans le middleware Go-Gin ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 02:20:14173parcourir

How Can I Read the Request Body Multiple Times in Go-Gin Middleware?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn