go - 将在所有其他处理程序之前运行的中间件
问题描述
我主要有这个:
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")
})
但是这个新路由器没有被击中,我的其他路由也没有被击中。我应该怎么做?
解决方案
通过调用Router.Use注册中间件
示例代码在这里
您的代码应该是:
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)
})
})
推荐阅读
- ms-access - 在单独的表格中查找日期范围内的多个条件
- c# - 如何在 Visual Studio 中设置 RegistryKey 值?
- javascript - ElementUI 消息初始渲染禁用
- dialogflow-es - Dialogflow 在同一个句子中处理两个或多个意图的方法
- c# - 每分钟都会调用一些 C# 方法(asp.net web api web)
- xunit - NSubstitute ReceivedCallsException 错误时按顺序运行调用
- r - 与 R/RStudio 建立 Microsoft SQL Server 连接
- android - 使用 Gradle 插件 v4.10.1 重命名 Apk
- angular - jspdf 上显示奇怪的字符(þÿ)
- javascript - 参数未传递任何内容或传递 null