Maison >développement back-end >Golang >Comment puis-je réutiliser les corps de requête dans les gestionnaires de middleware HTTP Go-chi ?

Comment puis-je réutiliser les corps de requête dans les gestionnaires de middleware HTTP Go-chi ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 13:32:09932parcourir

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

Détermination de la réutilisabilité du corps de la requête dans les gestionnaires de middleware HTTP

Dans ce scénario, le problème se pose lorsque vous essayez de réutiliser une méthode dans une autre dans un Go -chi routeur HTTP. Le gestionnaire externe, Registration(), lit le corps de la requête à l'aide de ioutil.ReadAll(r.Body), ne laissant aucune donnée disponible pour le gestionnaire interne, Create(), à partir duquel analyser JSON.

Solution : Restauration du corps de la requête

Pour résoudre ce problème, implémentez le correctif suivant :

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)
}

Voici comment ce code résout le problème :

  • io.ReadAll(r.Body) : lit l'intégralité du corps de la requête.
  • io.NopCloser( bytes.NewReader(b)) : restaure le corps de la requête en créant un io.Reader à partir du précédent lu data.
  • r.Body = io.NopCloser(...) : Remplace le r.Body d'origine par le corps restauré.

De cette façon , le gestionnaire interne peut accéder aux données JSON à partir du corps de la requête sans rencontrer l'erreur « fin inattendue de l'entrée JSON ».

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