"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تمرير البيانات من البرامج الوسيطة إلى المعالجات في Golang؟

كيف يمكنني تمرير البيانات من البرامج الوسيطة إلى المعالجات في Golang؟

تم النشر بتاريخ 2024-11-15
تصفح:518

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 مرة أخرى في المعالجات الخاصة بك، والتي هي أكثر كفاءة.

التحديث:

حزمة سياق الغوريلا حاليًا في وضع الصيانة.

func Middleware(next http. المعالج) http.Handler { إرجاع http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // عمليات الوسيطة // تحليل الجسم/الحصول على الرمز المميز. ctx := context.WithValue(r.Context(), "token, token) next.ServeHTTP(w, r.WithContext(ctx)) }) } func Handler() http.Handler { إرجاع http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { الرمز المميز:= r.Context().Value("الرمز المميز") })
            
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3