Heim > Backend-Entwicklung > Golang > Wie kann ich Daten von der Middleware an Handler in Golang übergeben?

Wie kann ich Daten von der Middleware an Handler in Golang übergeben?

DDD
Freigeben: 2024-11-10 09:50:02
Original
651 Leute haben es durchsucht

How Can I Pass Data from Middleware to Handlers in Golang?

Übergabe von Daten von Middleware an Handler

In Ihrem Design verfügen Sie über Middleware, die eine eingehende Anfrage verarbeitet, und über Handler, die einen http.Handler zurückgeben . Sie möchten Daten von der Middleware an die Handler übergeben, insbesondere ein JSON-Web-Token, das aus dem Anforderungstext geparst wird.

Um dies zu erreichen, können Sie das Kontextpaket von Gorilla verwenden:

import (
    "github.com/gorilla/context"
)

func Middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Middleware operations
        // Parse body/get token.
        context.Set(r, "token", token)

        next.ServeHTTP(w, r)
    })
}

func Handler() http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        token := context.Get(r, "token")
    })
}
Nach dem Login kopieren

In Mit der Middleware analysieren Sie den Anforderungstext und speichern das JWT im Anforderungskontext. Dann können Sie im Handler das JWT aus dem Kontext abrufen:

token := context.Get(r, "token")
Nach dem Login kopieren

Dadurch können Sie vermeiden, das JWT erneut in Ihren Handlern zu analysieren, was effizienter ist.

Update:

Das Gorilla-Kontextpaket befindet sich derzeit im Wartungsmodus.

func Middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Middleware operations
        // Parse body/get token.
        ctx := context.WithValue(r.Context(), "token", token)

        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

func Handler() http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        token := r.Context().Value("token")
    })
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Daten von der Middleware an Handler in Golang übergeben?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage