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
Freigeben: 2024-12-08 15:24:12
Original
288 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage