首頁 >後端開發 >Golang >如何將參數從中介軟體傳遞到控制器

如何將參數從中介軟體傳遞到控制器

王林
王林轉載
2024-02-13 17:15:10436瀏覽

如何將參數從中介軟體傳遞到控制器

php小編百草為您介紹如何將參數從中間件傳遞到控制器。在開發過程中,我們經常需要在中間件中取得一些參數,然後將這些參數傳遞給控制器進行後續處理。要實現這個功能,我們可以透過在中間件中使用$request物件的with方法來將參數傳遞給控制器。首先,我們需要在中間件中取得參數,然後使用$request物件的with方法將參數加入請求物件中,最後在控制器中透過$request物件的input方法取得這些參數即可。這樣,我們就成功地將參數從中間件傳遞到控制器了。這種方法簡單易行,能夠滿足我們的需求。希望這個方法對您有幫助!

問題內容

我正在使用 Echo Labstack 框架建立一個 Web API。我的路線中有一個中間件來檢查使用者身份驗證,但後來我在將資料傳遞給控制器時遇到了困難,並且在 Google 和 SO 中找不到任何相關資訊。

路線.go

func Routes(e *echo.Echo) {
    e.(middlewareAuthorise)
    user := e.Group("/user")
    user.GET("/profile", controllers.UserProfile)
}

func middlewareAuthorise(next echo.HandlerFunc) echo.HandlerFunc {
    return func(c echo.Context) error {
        // Do some authentication here with access token and get user ID
        auth := controllers.Auth(c, 1)
        if auth["status"] != 200 {
            return c.JSON(401, map[string]any{"status": 401})
        }

        user_id := auth["user_id"]
        // I want to pass user_id to my controllers
        return next(c, user_id)
    }
}

controllers.go

func UserProfile(c echo.Context) error {
    // I want to get the user_id here from middleware
    return c.JSON(200, map[string]any{
        "user_id": user_id,
    })
}

我已經搜尋並嘗試了多種組合一整天,但找不到有效的方法。如何以最有效的方式將參數從中間件傳遞到我的控制器?

解決方法

您可以使用上下文的 Set# 和Get 方法。

以上是如何將參數從中介軟體傳遞到控制器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除