Go和Gorilla Mux不工作
我就是没办法让这辆车开动。我希望在每个get请求上提供一个静态文件,假设它存在,否则就提供index.html。这是我目前简化的路由器:Go和Gorilla Mux不工作,go,mux,gorilla,Go,Mux,Gorilla,我就是没办法让这辆车开动。我希望在每个get请求上提供一个静态文件,假设它存在,否则就提供index.html。这是我目前简化的路由器: func fooHandler() http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Foo")) } return http.HandlerFunc(fn) } func notFound(w http.Response
func fooHandler() http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Foo"))
}
return http.HandlerFunc(fn)
}
func notFound(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "public/index.html")
}
func main() {
router = mux.NewRouter()
fs := http.FileServer(http.Dir("public"))
router.Handle("/foo", fooHandler())
router.PathPrefix("/").Handler(fs)
router.NotFoundHandler = http.HandlerFunc(notFound)
http.ListenAndServe(":3000", router)
}
/福工作正常
/存在的文件工作正常
/不存在的文件不起作用
-我得到404页未找到,而不是index.html
那么我在这里做错了什么呢?问题是
路由器.PathPrefix(“/”).Handler(fs)
将匹配每个路由,而NotFoundHandler
永远不会执行。
只有当路由器找不到匹配的路由时,才会执行NotFoundHandler
当您明确定义路由时,它将按预期工作
你可以这样做:
router.Handle("/foo", fooHandler())
router.PathPrefix("/assets").Handler(fs)
router.HandleFunc("/", index)
router.HandleFunc("/about", about)
router.HandleFunc("/contact", contact)
router.NotFoundHandler = http.HandlerFunc(notFound)
这对我很有效
r.NotFoundHandler = http.HandlerFunc(NotFound)
确保“NotFound”函数具有:
func NotFound(w http.ResponseWriter, r *http.Request) { // a * before http.Request
如果请求没有到达任何处理程序,而我们得到的响应是错误的请求,该怎么办?是否有测试该场景的方法?