我正在学习本教程。 http://thenewstack.io/make-a-restful-json-api-go/
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(route.HandlerFunc)
}
我需要使用yaag中间件包装端点func。
r.HandleFunc("/", middleware.HandleFunc(handler))
如何实现这一目标?
编辑: 我正在围绕Logger包裹并返回haddler。 Logger接受第一个参数,如http.Handle。因此包装route.HandlerFunc将无法正常工作。你能帮帮我吗?
handler := Logger(route.HandlerFunc, route.Name)
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(handler)
答案 0 :(得分:3)
你要做的就是用 .HandlerFunc()替换.Handler()并用中间件包装你的处理函数,这样每个端点首先会传递给yaag中间件,然后传递给你的处理程序功能,像这样:
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
HandlerFunc(middleware.HandleFunc(route.HandlerFunc)) // change here
}