"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso passar dados de middleware para manipuladores em Golang?

Como posso passar dados de middleware para manipuladores em Golang?

Publicado em 15/11/2024
Navegar:846

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

Passando dados de middleware para manipuladores

Em seu design, você tem um middleware que processa uma solicitação recebida e manipuladores que retornam um http.Handler . Você deseja passar dados do middleware para os manipuladores, especificamente um token da web JSON analisado a partir do corpo da solicitação.

Para conseguir isso, você pode utilizar o pacote de contexto do 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")
    })
}

No middleware, você analisa o corpo da solicitação e armazena o JWT no contexto da solicitação. Então, no manipulador, você pode recuperar o JWT do contexto:

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

Isso permite evitar a análise do JWT novamente em seus manipuladores, o que é mais eficiente.

Atualização:

O pacote de contexto Gorilla está atualmente em modo de manutenção.

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")
    })
}
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3