尝试服务使用React-Router的React SPA

时间:2018-12-20 22:07:54

标签: go

我使用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应该处理这些路线。

2 个答案:

答案 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

中找到了另一种方法。