Maison >développement back-end >Golang >Comment réutiliser les données du corps de la requête HTTP dans les gestionnaires de middleware Go-chi ?
Réutilisation du corps de la requête HTTP dans les gestionnaires de middleware Go-chi
Lorsque vous utilisez go-chi pour le routage HTTP, il est pratique de réutiliser le code dans plusieurs gestionnaires. Cependant, cela peut entraîner des problèmes inattendus si les gestionnaires s'appuient sur les données du corps de la demande.
Considérez le scénario suivant :
func Registration(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) // if you delete this line, the user will be created // ...other code // if all good then create new user user.Create(w, r) } ... func Create(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) // ...other code // ... there I get the problem with parse JSON from &b }
Dans cet exemple, les gestionnaires d'inscription et de création tentent de lire le corps de la requête en utilisant ioutil.ReadAll. Cependant, puisque Registration lit le corps jusqu'à la fin, il n'y a plus de données à lire lorsque Create est appelé.
Pour résoudre ce problème, le gestionnaire externe (Registration) doit restaurer le corps de la requête avec les données lues précédemment. Ceci peut être réalisé en utilisant le code 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) }
Ici, la fonction bytes.NewReader() renvoie un io.Reader sur une tranche d'octets, tandis que la fonction io.NopCloser convertit ce lecteur en io. Interface ReadCloser requise pour r.Body. En réinitialisant r.Body avec les données d'origine, Create peut désormais accéder et analyser le corps de la requête comme prévu.
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!