2016-12-21 12 views
1

ミドルウェアをGO Gorilla Toolkit muxサブルータに適用するにはどうすればよいですか?ミドルウェアをGolang Gorilla muxサブルータで使用

私は、次のコードを持っている:だけ/apiで始まるこれらのパスに、私はセキュリティトークンをチェックするミドルウェア・ハンドラを適用したい

router := mux.NewRouter().StrictSlash(true) 
apiRouter := router.PathPrefix("/api/").Subrouter() 

apiRouter.Methods(http.MethodGet). 
    Path("/api/path/to/handler").Handler(handleAPICall) 

を。

答えて

1

以下は動作するようです:

apiRouter := mux.NewRouter() 

router.PathPrefix("/api/").Handler(http.StripPrefix("/api", 
    adapt(apiRouter, checkTokenHandler))) 

apiRouter.Methods(http.MethodGet). 
    Path("/path/to/handler").Handler(handleAPICall) 
// Note that `/api` has been removed from the path. 

func adapt(h http.Handler, adapters ...func(http.Handler) http.Handler) 
    http.Handler { 
    for _, adapter := range adapters { 
     h = adapter(h) 
    } 
    return h 
} 

func checkTokenHandler(h http.Handler) http.Handler { 
    return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 
     // Check the security cookie. 
     h.ServeHTTP(res, req) 
    }) 
} 
関連する問題