【问题标题】:middleware that will run before all other handlers将在所有其他处理程序之前运行的中间件
【发布时间】:2018-10-24 08:22:37
【问题描述】:

我主要有这个:

    router := mux.NewRouter()

    router.PathPrefix("/").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        glog.Info("before")
    })

    router.HandleFunc("/people", person.GetMany).Methods("GET")
    router.HandleFunc("/people/{id}", person.GetOne).Methods("GET")
    router.HandleFunc("/people/{id}", person.Create).Methods("POST")
    router.HandleFunc("/people/{id}", person.Delete).Methods("DELETE")

这意味着除了第一个中间件处理程序之外没有任何东西受到影响,所以我尝试创建一个新路由器来处理日志记录:

    mux.NewRouter().PathPrefix("/").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        glog.Info("before")
    })

但是这个新路由器没有被击中,我的其他路由也没有被击中。我应该怎么做?

【问题讨论】:

    标签: go gorilla


    【解决方案1】:

    中间件通过调用Router.Use注册

    示例代码是here

    你的代码应该是:

    router.Use(func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            glog.Info("before")
            next.ServeHTTP(w, r)
        })
    })
    

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 1970-01-01
      • 2023-04-05
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2021-06-06
      相关资源
      最近更新 更多