Bei der Arbeit mit Go-chi für HTTP-Routing ist es häufig erforderlich, Anforderungstexte über mehrere Handler hinweg wiederzuverwenden. Eine häufige Herausforderung entsteht jedoch, wenn der Anfragetext nur einmal gelesen werden kann.
Betrachten Sie beispielsweise den folgenden Code:
func Registration(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) // read request body // ...other code user.Create(w, r) } ... func Create(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadAll(r.Body) // ...other code }
In diesem Beispiel liest der Registrierungshandler den Anfragetext mit ioutil.ReadAll. Wenn der Create-Handler aufgerufen wird, versucht er, den Textkörper erneut zu lesen, was zu einem unerwarteten Ende der JSON-Eingabefehler führt.
Das grundlegende Problem besteht darin, dass der erste Aufruf von ReadAll den Anforderungstext erschöpft. Um dieses Problem zu beheben, muss der Anforderungstext mit den zuvor gelesenen Daten wiederhergestellt werden. Der folgende Code zeigt, wie:
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) }
In diesem überarbeiteten Code wird io.ReadAll verwendet, um den Anforderungstext zu lesen, und dann wird der Anforderungstext vor dem Aufruf mit den Funktionen bytes.NewReader und io.NopCloser wiederhergestellt user.Create. Dadurch wird der Anforderungstext effektiv für nachfolgende Handler verfügbar gemacht.
Das obige ist der detaillierte Inhalt vonWie kann ich HTTP-Anforderungskörper in der Go-chi-Middleware wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!