首頁 >後端開發 >Golang >如何在 Golang 中將資料從中間件傳遞到處理程序?

如何在 Golang 中將資料從中間件傳遞到處理程序?

DDD
DDD原創
2024-11-10 09:50:02645瀏覽

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

將資料從中間件傳遞到處理程序

在您的設計中,您有處理傳入請求的中間件和返回http.Handler 的處理程序。您想要將資料從中間件傳遞到處理程序,特別是從請求正文解析的 JSON Web 令牌。

要實現此目的,您可以利用 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")
    })
}

以上是如何在 Golang 中將資料從中間件傳遞到處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn