我正在尝试在处理程序调用之后实现条件中间件的行为。
我研究了上下文,并能够更改/将它们用作标志,将数据从中间件传递到处理程序中,而不是从处理程序传递到中间件。方法签名不允许返回值。
这是我正在使用的内容的快速摘要:
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)
}