如何对使用大猩猩mmux的所有路由应用相同的处理程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对使用大猩猩mmux的所有路由应用相同的处理程序相关的知识,希望对你有一定的参考价值。

我正在使用有价值的rootHandler处理产生的错误。我想知道如何在我的api可以服务的每个端点上使用此处理程序。

r := mux.NewRouter()

r.Handle("/api/auth", rootHandler(authUser)).Methods("POST")
r.HandleFunc("/api/endpoint1", function1).Methods("POST")
r.HandleFunc("/api/endpoint2", function2).Methods("POST")

    s := &http.Server{
        Handler:      r,
        Addr:         "127.0.0.1:8080",
        WriteTimeout: 15 * time.Second,
        ReadTimeout:  15 * time.Second,
    }

我必须使用rootHanlder(functionName)包装每个路由函数,还是有办法将其应用于每个路由?

答案

取决于rootHandler的确切结构,您可能可以将其设置为中间件:

func GetRootHandlerMW(authUser SomeType) func(http.Handler) http.Handler {
  return func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Do what needs to be done?
        next.ServeHTTP(w, r)
    })
  }
}

...
r.Use(GetRootHandlerMW(authUser))

以上是关于如何对使用大猩猩mmux的所有路由应用相同的处理程序的主要内容,如果未能解决你的问题,请参考以下文章

CORS 预检神秘地因大猩猩/处理程序而失败

使用大猩猩处理程序允许起源

三Express 路由

如何强制 Laravel 项目对所有路由使用 HTTPS?

微服务工程中,基础组件应用

如何将请求路由到正确的租户 API 网关?