将在所有其他处理程序之前运行的中间件

时间:2018-10-24 00:12:43

标签: go gorilla

我主要是这样:

    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")
    })

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

1 个答案:

答案 0 :(得分:2)

通过调用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)
    })
})