通过处理程序的条件中间件行为

时间:2019-07-08 20:30:58

标签: http go handler middleware

我正在尝试在处理程序调用之后实现条件中间件的行为。

我研究了上下文,并能够更改/将它们用作标志,将数据从中间件传递到处理程序中,而不是从处理程序传递到中间件。方法签名不允许返回值。

这是我正在使用的内容的快速摘要:

func Reporter(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        next.ServeHTTP(w, r)
        // conditionally check if err != nil here and log
    })
}

func appRoutes(r chi.Router) {
    r.Use(Reporter)
    r.Get("/", ListApplications)
}

func ListApplications(w http.ResponseWriter, , r *http.Request) {
    apps, err := fetchApps()
    if err != nil {
        render.Render(w, r, ErrorStructRenderer(err))
        return
    }
    render.Respond(w, r, apps)
}

0 个答案:

没有答案