如何在中间件go-chi中获得路线

时间:2018-10-08 05:51:35

标签: go go-chi

要检查授权,我需要知道授权中间件内部的路由。我检查了go-chi的文档,并以此方式进行了操作:

func Authenticator(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    // .............
    next.ServeHTTP(w, r)
    routePattern := chi.RouteContext(r.Context()).RoutePattern()
    fmt.Println("AUTHORIZATION:", routePattern, route)

    routepath := strings.Replace(routePattern, "/v1", "", 1) // todo use api prefix from config
    routepath = strings.Replace(routepath, "/*", "", 1)

    fmt.Println("ROUTEPATH:", routepath, route)

    if !CheckAuthorization(*token, routepath, method, "*", "*", "*") {
        http.Error(w, http.StatusText(401), 401)
        return
    }

    })
}

这给了我我所需要的。 但是现在显然已经通过了授权,因此如果已经执行了检查routepattern处理程序(将结果写到客户端)

在检查RoutePattern()之前,是否还有其他方法可以在没有next.ServerHTTP(w,r)的情况下在中间件内部获取路由?

1 个答案:

答案 0 :(得分:0)

根据https://medium.com/@szablowska.patrycja/chi-and-missing-urlparam-in-middleware-9435c48a063b

解决
r := chi.NewRouter()
r.Route("/myroute", func(r chi.Router) {
    r.With(myMiddleware).Route("/{myparam}", func(r chi.Router) {
        r.Get("/", getHandler)
        r.Put("/", putHandler)
    })
})