在所有其他处理程序之前 运行 的中间件
middleware that will run before all other handlers
我主要有这个:
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")
})
但是这个新路由器没有被击中并且 none 我的其他路由被击中。我应该怎么做?
注册中间件
示例代码是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)
})
})
我主要有这个:
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")
})
但是这个新路由器没有被击中并且 none 我的其他路由被击中。我应该怎么做?
示例代码是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)
})
})