Menyalurkan Data daripada Middleware kepada Pengendali
Dalam reka bentuk anda, anda mempunyai middleware yang memproses permintaan masuk dan pengendali yang mengembalikan http.Handler . Anda ingin menghantar data daripada perisian tengah kepada pengendali, khususnya token web JSON yang dihuraikan daripada badan permintaan.
Untuk mencapai ini, anda boleh menggunakan pakej konteks 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") }) }
Dalam middleware, anda menghuraikan badan permintaan dan menyimpan JWT dalam konteks permintaan. Kemudian, dalam pengendali, anda boleh mendapatkan semula JWT daripada konteks:
token := context.Get(r, "token")
Ini membolehkan anda mengelakkan menghuraikan JWT sekali lagi dalam pengendali anda, yang lebih cekap.
Kemas kini:
Pakej konteks Gorilla sedang dalam mod penyelenggaraan.
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") }) }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Data daripada Middleware kepada Pengendali di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!