Wiederverwendung des HTTP-Anforderungstexts in Go-Middleware-Handlern
Im Net/http-Paket von Go bieten Middleware-Handler eine bequeme Möglichkeit, eingehende Daten zu verarbeiten und zu ändern HTTP-Anfragen vor der Verarbeitung durch den eigentlichen Anwendungscode. Eine häufige Herausforderung entsteht jedoch, wenn ein Middleware-Handler den Anforderungstext wiederverwenden muss, der bereits von einem vorhergehenden Handler gelesen wurde.
Bedenken Sie den folgenden Codeausschnitt:
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 }
In diesem Szenario , liest der Registrierungshandler den Anforderungstext in die Variable b und übergibt die Anforderung r an den user.Create-Handler, der versucht, den Text erneut zu lesen. Dies führt jedoch zu einem Fehler, da der Hauptteil bereits vom Registrierungshandler verbraucht wurde.
Die Lösung für dieses Problem ist einfach: Stellen Sie den Anforderungshauptteil im äußeren Handler wieder her, nachdem er gelesen wurde. Dies kann mit den Funktionen bytes.NewReader() und io.NopCloser erreicht werden:
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) }
Die Funktion bytes.NewReader() erstellt einen io.Reader aus einem Byte-Slice und io.NopCloser konvertiert einen io .Reader auf den erforderlichen io.ReadCloser-Typ für r.Body. Durch die Wiederherstellung des Hauptteils können nachfolgende Handler auf die ursprünglichen Anforderungsdaten zugreifen.
Das obige ist der detaillierte Inhalt vonWie kann ich einen HTTP-Anfragetext in Go-Middleware-Handlern wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!