ホームページ > バックエンド開発 > Golang > Go でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?

Go でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-15 04:50:03
オリジナル
915 人が閲覧しました

How to Pass Data from Middleware to Handlers in Go?

ミドルウェアからハンドラーにデータを渡す方法

このシナリオでは、リクエスト本文から JWT を解析するミドルウェアを使用しており、それをハンドラーに渡します。ハンドラーを使用して冗長な解析を回避します。ミドルウェアは http.Handler を返し、ハンドラーも http.Handler を返すため、それらの間で JWT を渡す方法を見つける必要があります。

推奨されるアプローチの 1 つは、Gorilla Mux のコンテキスト パッケージを利用することです。コンテキスト パッケージを使用すると、リクエストに関連付けられた値をタイプセーフな方法で保存できます。

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.
    })
}
ログイン後にコピー

コンテキスト パッケージを利用すると、解析された JWT をミドルウェア内のリクエスト コンテキストに保存し、簡単にアクセスできます。

更新:

Gorilla コンテキスト パッケージが現在メンテナンス モードになっていることに注目してください。新しいプロジェクトの場合は、Go 1.7 で導入された context.Context() 機能を使用することをお勧めします。これにより、リクエスト コンテキスト データを管理するためのより堅牢かつ効率的な方法が提供されます。

以上がGo でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート