2 回答

TA貢獻1942條經驗 獲得超3個贊
嵌套處理程序永遠不會匹配,因為您沒有刪除早期處理程序的 URL 前綴。快速修復以顯示我的意思:
// h.router.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
// quick fix
h.router.HandleFunc("/admin/test", func(w http.ResponseWriter, r *http.Request) {
顯然,您希望嵌套處理程序不知道它的嵌套方式,因此在注冊子處理程序時,請去除 URL 前綴,以便您的子處理程序匹配:
// r.PathPrefix("/admin").Handler(admin.NewHandler())
// better
r.PathPrefix("/admin/").Handler(
http.StripPrefix(
"/admin",
admin.NewHandler(),
),
)

TA貢獻1995條經驗 獲得超2個贊
我能夠使用.以下是大猩猩Mux中嵌套子路由的用法示例的鏈接Subrouter()Subrouter()
func main() {
r := mux.NewRouter()
r.HandleFunc("/", handler)
r.PathPrefix("/admin").Subrouter().HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "test")
})
log.Fatal(http.ListenAndServe(":8000", r))
}
如果你想把它分成另一個文件,你也可以這樣做:
func main() {
r := mux.NewRouter()
r.HandleFunc("/", handler)
subRoute := r.PathPrefix("/admin").Subrouter()
NewHandler(subRoute)
log.Fatal(http.ListenAndServe(":8000", r))
}
func NewHandler(r* mux.Router) *Handler {
h := &Handler{}
h.router = r
h.AddRoutes()
return h
}
func (h *Handler) AddRoutes() {
fmt.Print("hi here") // <--- printed here to prove func gets ran.
h.router.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "test")
})
}
- 2 回答
- 0 關注
- 101 瀏覽
添加回答
舉報