2 回答
TA贡献1890条经验 获得超9个赞
它被称为“中间件”,因为它应该把你Handler
放在“中间”。它在您的之前接收输入Handler
,并接收您的输出Handler
。
本质上,要让你的中间件工作,你需要至少有一个处理程序。最好你可以只使用你在处理程序而不是中间件中需要的这个功能。
TA贡献1815条经验 获得超12个赞
在中间件上,您需要调用处理程序next,以便所有传入请求都将继续到目标路由。
func dynamicRouteMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Error")
next.ServeHTTP(w, r) // <------- this one
})
}
您可以根据需要注册任何路由,但最后要确保该r对象用作/路由的处理程序。
r.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("test"))
})
r.HandleFunc("/test/12", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("test 12"))
})
r.HandleFunc("/about-us", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("about us"))
})
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
当您访问/test, /test/12, 或/about-us; 仍将Error打印。
以前它不会打印,因为您不会继续执行下一个处理程序。该代码next.ServeHTTP(w, r)在您的情况下是强制性的。
- 2 回答
- 0 关注
- 126 浏览
添加回答
举报