Попытка обслужить React SPA, использующий реагирующий маршрутизатор - PullRequest
0 голосов
/ 21 декабря 2018

Я использую 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)
}

Не хочу, чтобы Го давал 404 с, Спа должен обрабатывать эти маршруты.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Так что я не смог найти каких-либо реальных решений для этого.Поэтому я решил использовать другой подход, используя mux.Subrouter, найденный здесь Статический файловый сервер на Голанге, использующий gorilla / mux

0 голосов
/ 21 декабря 2018

Маршрутизатор экспортирует поле 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...