«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как передать данные из промежуточного программного обеспечения в обработчики в Golang?

Как передать данные из промежуточного программного обеспечения в обработчики в Golang?

Опубликовано 15 ноября 2024 г.
Просматривать:612

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

Передача данных из промежуточного программного обеспечения в обработчики

В вашем проекте есть промежуточное программное обеспечение, которое обрабатывает входящий запрос, и обработчики, возвращающие http.Handler . Вы хотите передать данные из промежуточного программного обеспечения обработчикам, в частности веб-токен JSON, проанализированный из тела запроса.

Для достижения этого вы можете использовать контекстный пакет 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")
    })
}

В промежуточном программном обеспечении вы анализируете тело запроса и сохраняете JWT в контексте запроса. Затем в обработчике вы можете получить JWT из контекста:

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

Это позволяет вам избежать повторного анализа JWT в ваши обработчики, что более эффективно.

Обновление:

Контекстный пакет Gorilla в настоящее время находится в режиме обслуживания.

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")
    })
}
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3