Heim >Backend-Entwicklung >Golang >Wie kann man HTTP-Anforderungskörperdaten über Go-chi-Middleware-Handler hinweg wiederverwenden?

Wie kann man HTTP-Anforderungskörperdaten über Go-chi-Middleware-Handler hinweg wiederverwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-08 15:24:12281Durchsuche

How to Reuse HTTP Request Body Data Across Go-chi Middleware Handlers?

Wiederverwendung des HTTP-Anforderungstexts in Go-chi-Middleware-Handlern

Bei der Verwendung von go-chi für HTTP-Routing ist es praktisch, Code in mehreren wiederzuverwenden Handler. Dies kann jedoch zu unerwarteten Problemen führen, wenn die Handler auf Anforderungstextdaten angewiesen sind.

Stellen Sie sich das folgende Szenario vor:

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 Beispiel versuchen sowohl der Registration- als auch der Create-Handler zu lesen den Anforderungstext mit ioutil.ReadAll. Da die Registrierung den Hauptteil jedoch bis zum Ende liest, sind beim Aufruf von „Erstellen“ keine Daten mehr zum Lesen übrig.

Um dieses Problem zu beheben, muss der äußere Handler (Registrierung) den Anforderungshauptteil mit den zuvor gelesenen Daten wiederherstellen. Dies kann mit dem folgenden Code 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)
}

Hier gibt die Funktion bytes.NewReader() einen io.Reader auf einem Byte-Slice zurück, während die Funktion io.NopCloser diesen Reader in den io umwandelt. ReadCloser-Schnittstelle für r.Body erforderlich. Durch das Zurücksetzen von r.Body mit den Originaldaten kann Create nun wie erwartet auf den Anfragetext zugreifen und ihn analysieren.

Das obige ist der detaillierte Inhalt vonWie kann man HTTP-Anforderungskörperdaten über Go-chi-Middleware-Handler hinweg 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