我使用Gorilla / Mux进行路由,并且希望为React SPA提供服务,而不管URL路径如何。
func main() {
fmt.Println("server running...")
hub := newHub()
go hub.run()
router := mux.NewRouter()
router.HandleFunc("/api/create", Api)
router.HandleFunc("/api/getpoll", Api)
router.HandleFunc("/api/update", Api)
router.HandleFunc("/sockets/{id}", func(w http.ResponseWriter, r
*http.Request) {
Socketme(hub, w, r)
})
// router.HandleFunc("/{rest:.*}", emberHandler)
router.PathPrefix("/").HandlerFunc(serveFile)
log.Fatal(http.ListenAndServe(":5000", router))
}
func serveFile(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir("./public/build")).ServeHTTP(w, r)
}
不希望Go提供404,那么Spa应该处理这些路线。
答案 0 :(得分:0)
Router导出一个NotFoundHandler
字段,您可以将其设置为自定义处理程序。
router := mux.NewRouter()
router.NotFoundHandler = MyCustom404Handler
因此您可以执行以下操作:
router.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "./public/build/index.html")
}))
,以便它在通常返回404
答案 1 :(得分:0)
所以我找不到任何可行的解决方案。因此,我最终使用了mux.Subrouter在Static file server in Golang using gorilla/mux
中找到了另一种方法。