"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo pasar datos del middleware a los controladores en Golang?

¿Cómo puedo pasar datos del middleware a los controladores en Golang?

Publicado el 2024-11-15
Navegar:928

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

Pasar datos del middleware a los controladores

En su diseño, tiene middleware que procesa una solicitud entrante y controladores que devuelven un http.Handler . Desea pasar datos del middleware a los controladores, específicamente un token web JSON analizado desde el cuerpo de la solicitud.

Para lograr esto, puede utilizar el paquete de contexto de Gorilla:

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

En el middleware, analiza el cuerpo de la solicitud y almacena el JWT en el contexto de la solicitud. Luego, en el controlador, puede recuperar el JWT del contexto:

token := context.Get(r, "token")

Esto le permite evitar analizar el JWT nuevamente en sus controladores, lo cual es más eficiente.

Actualización:

El paquete de contexto Gorilla se encuentra actualmente en mantenimiento modo.

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")
    })
}
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3