Heim >Backend-Entwicklung >Golang >Wie kann ich Anforderungskörper in Go-chi-HTTP-Middleware-Handlern wiederverwenden?

Wie kann ich Anforderungskörper in Go-chi-HTTP-Middleware-Handlern wiederverwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 13:32:09980Durchsuche

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

Bestimmen der Wiederverwendbarkeit von Anforderungstexten in HTTP-Middleware-Handlern

In diesem Szenario tritt das Problem auf, wenn versucht wird, eine Methode innerhalb einer anderen in einem Go wiederzuverwenden -chi HTTP-Router. Der äußere Handler, Registration(), liest den Anforderungstext mit ioutil.ReadAll(r.Body), sodass dem inneren Handler, Create(), keine Daten zum Parsen von JSON zur Verfügung stehen.

Lösung : Wiederherstellen des Anforderungstexts

Um dieses Problem zu beheben, führen Sie Folgendes aus Fix:

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

So behebt dieser Code das Problem:

  • io.ReadAll(r.Body): Liest den gesamten Anfragetext.
  • io.NopCloser(bytes.NewReader(b)): Stellt wieder her den Anforderungstext durch Erstellen eines io.Reader aus den zuvor gelesenen Daten.
  • r.Body = io.NopCloser(...): Ersetzt den ursprünglichen r.Body durch den wiederhergestellten Text .

Auf diese Weise kann der innere Handler auf die JSON-Daten aus dem Anforderungshauptteil zugreifen, ohne auf das „unerwartete Ende der JSON-Eingabe“ zu stoßen. Fehler.

Das obige ist der detaillierte Inhalt vonWie kann ich Anforderungskörper in Go-chi-HTTP-Middleware-Handlern wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn