Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menghantar Data daripada Middleware kepada Pengendali dalam Go?

Bagaimana untuk Menghantar Data daripada Middleware kepada Pengendali dalam Go?

Barbara Streisand
Lepaskan: 2024-11-15 04:50:03
asal
921 orang telah melayarinya

How to Pass Data from Middleware to Handlers in Go?

Cara Menghantar Data daripada Middleware kepada Pengendali

Dalam senario ini, anda menggunakan perisian tengah yang menghuraikan JWT daripada badan permintaan dan ingin menghantarnya kepada pengendali anda untuk mengelakkan penghuraian berlebihan. Memandangkan middleware anda mengembalikan http.Handler dan pengendali anda juga mengembalikan http.Handler, anda perlu mencari jalan untuk melepasi JWT antara mereka.

Satu pendekatan yang disyorkan ialah menggunakan pakej konteks daripada Gorilla Mux. Pakej konteks membolehkan anda menyimpan nilai yang dikaitkan dengan permintaan dalam cara yang selamat jenis.

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.
    })
}
Salin selepas log masuk

Dengan menggunakan pakej konteks, anda boleh menyimpan JWT yang dihuraikan dalam konteks permintaan dalam perisian tengah dan mengakses dengan mudah ia dalam pengendali anda tanpa perlu menghuraikan semula.

Kemas kini:

Perlu diperhatikan bahawa pakej konteks Gorilla kini dalam mod penyelenggaraan. Untuk projek baharu, adalah disyorkan untuk menggunakan ciri context.Context() yang diperkenalkan dalam Go 1.7, yang menyediakan cara yang lebih mantap dan cekap untuk mengurus data konteks permintaan.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Data daripada Middleware kepada Pengendali dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan