如何用yaag中间件包装gorilla mux func处理程序

时间:2016-10-27 23:45:22

标签: go gorilla

我正在学习本教程。 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)

1 个答案:

答案 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
}