2 回答

TA貢獻1890條經驗 獲得超9個贊
它被稱為“中間件”,因為它應該把你Handler
放在“中間”。它在您的之前接收輸入Handler
,并接收您的輸出Handler
。
本質上,要讓你的中間件工作,你需要至少有一個處理程序。最好你可以只使用你在處理程序而不是中間件中需要的這個功能。

TA貢獻1815條經驗 獲得超13個贊
在中間件上,您需要調用處理程序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 關注
- 165 瀏覽
添加回答
舉報