Heim >Backend-Entwicklung >Golang >Wie übergebe ich Daten von der Middleware an Handler in Go?
In diesem Szenario verwenden Sie eine Middleware, die ein JWT aus dem Anforderungstext analysiert und an das Sie es übergeben möchten Ihre Handler, um redundantes Parsen zu vermeiden. Da Ihre Middleware einen http.Handler zurückgibt und Ihre Handler ebenfalls einen http.Handler zurückgeben, muss eine Möglichkeit gefunden werden, das JWT zwischen ihnen weiterzugeben.
Ein empfohlener Ansatz ist die Verwendung des Kontextpakets von Gorilla Mux. Mit dem Kontextpaket können Sie mit einer Anfrage verknüpfte Werte typsicher speichern.
import ( "github.com/gorilla/context" ) // Middleware serves as a wrapper around the next handler. func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. token, err := getTokenFromRequest(r) if err != nil { http.Error(w, "Error getting token", http.StatusInternalServerError) return } context.Set(r, "token", token) next.ServeHTTP(w, r) }) } // Handler retrieves the JWT from the request context. func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") // Use the token in your handler logic. }) }
Durch die Verwendung des Kontextpakets können Sie das analysierte JWT im Anfragekontext innerhalb der Middleware speichern und einfach darauf zugreifen Es ist in Ihren Handlern verfügbar, ohne dass eine erneute Analyse erforderlich ist.
Aktualisierung:
Das ist erwähnenswert Das Gorilla-Kontextpaket befindet sich jetzt im Wartungsmodus. Für neue Projekte wird empfohlen, die in Go 1.7 eingeführte Funktion context.Context() zu verwenden, die eine robustere und effizientere Möglichkeit zur Verwaltung von Anforderungskontextdaten bietet.
Das obige ist der detaillierte Inhalt vonWie übergebe ich Daten von der Middleware an Handler in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!