第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從中間件獲取 gorilla/mux 路由器當(dāng)前路由名稱

從中間件獲取 gorilla/mux 路由器當(dāng)前路由名稱

Go
www說 2021-09-10 16:57:58
問題: 無法從中間件訪問 mux.CurrentRoute(r).GetName()。(雖然我已經(jīng)能夠從我的中間件訪問它,但由于它以前無法訪問請求,我不得不改變我的中間件的工作方式)。所以我搞砸了一些事情,但我不確定如何回到可以訪問路線名稱的工作狀態(tài)。任何幫助將非常感激!錯誤:runtime error: invalid memory address or nil pointer dereference 代碼:func main() {    var (        err          error        r            *mux.Router        devRouter    *mux.Router        usersRouter  *mux.Router        brandsRouter *mux.Router    )    defer db.Close()    defer store.Close()    r = mux.NewRouter()    devRouter = r.PathPrefix("/api/v1/dev").Subrouter()    usersRouter = r.PathPrefix("/api/v1/users").Subrouter()    brandsRouter = r.PathPrefix("/api/v1/brands").Subrouter()    // development endpoints    devRouter.HandleFunc("/db/seed", devDbSeed)    ...    // users    usersRouter.HandleFunc("/create", usersCreateHandlerFunc).Methods("POST").Name("USERS_CREATE")    ...    // brands    brandsRouter.HandleFunc("/create", brandsCreateHandlerFunc).Methods("POST").Name("BRANDS_CREATE")    ...    // products    brandsRouter.HandleFunc("/{brand_id:[0-9]+}/products", brandsProductsListHandlerFunc).Methods("GET").Name("BRANDS_PRODUCTS_LIST")    ...    // mwAuthorize and mwAuthenticate basically work the same    mw := []func(http.Handler) http.Handler{mwAuthenticate, mwAuthorize}    http.Handle("/", use(r, mw...))    err = http.ListenAndServe(":9000", nil)    if err != nil {         logIt(err)    }}更新(2015-01-04 @ 4:49PM EST):因此在刪除中間件(或至少注釋掉試圖讀取 mux.CurrentRoute 的部分)后,我能夠從目標(biāo) handlerfunc 中檢索路由名稱(例如: usersCreateHandlerFunc 或brandsCreateHandlerFunc)。這并沒有解決我的問題(我仍然想在中間件中執(zhí)行身份驗證/授權(quán)而不是每個 handlerfunc),我有一種預(yù)感,它讓我知道 *mux.Router 在我的中間件中不可用,直到最終完成.ServeHTTP 調(diào)用。(或類似的規(guī)定...)更新 (2015-01-04 @ 5:41PM EST):嘗試使用 Negroni 作為中間件組件的不同(盡管不太受歡迎)的方向。當(dāng)我嘗試獲取 mux.CurrentRoute 時仍然出現(xiàn) nil-pointer 錯誤。更新 (2015-01-04 @ 6:17PM EST):我可以從中間件 func 訪問請求(例如:r.URL),但仍然無法訪問 mux.Route(例如:mux.CurrentRoute( r))。在查看了多路復(fù)用源之后,我認(rèn)為這是因為當(dāng)前的多路復(fù)用上下文沒有被設(shè)置,因為路由器還沒有執(zhí)行匹配器(因此它不知道它當(dāng)前在什么路由上,直到中間件之后已完成)。但是,我仍然不確定如何解決這個問題,或者重新構(gòu)建我的代碼來處理這個問題。
查看完整描述

3 回答

?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗 獲得超12個贊

我遇到了同樣的問題,我以這種方式解決了:


var match mux.RouteMatch

routeExists := s.Router.Match(r, &match)

if routeExists && match.Route.GetName(){

    routeName := match.Route.GetName()

}

當(dāng)我定義路線時,我添加了我的路線.Name("route/:param")在哪里route/:param。


查看完整回答
反對 回復(fù) 2021-09-10
  • 3 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號