Как обслуживать (правильно) реагировать с роутером? - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь обслужить реагирующий роутер с помощью go, я уже сделал это, но у меня проблемы, я думаю, что способ, которым я это сделал, не правильный, или он не полный.Я использую Mux.Проблема в том, что когда я нажимаю <Link> в моем приложении, он корректно меняет вид, но когда я пытаюсь изменить его прямо из браузера или перезагружаю страницу, я получаю ошибку 404

Я пробовал разные способы, на самом деле я делаю так:

func main() {

    var dir = "./static"

    router := mux.NewRouter()

    fs := http.FileServer(http.Dir(dir))
    router.PathPrefix("/").Handler(fs)


    fmt.Println("Server running in port :8000")

    log.Fatal(http.ListenAndServe(":8000", router))

}

Я хочу, чтобы сервер обслуживал один и тот же каталог во всех запросах, таких как "/", "/ example", "/ example2и т. д.

1 Ответ

2 голосов
/ 20 июня 2019

Я предполагаю, что у вас есть какой-то статический контент, и вы бы хотели, чтобы все остальное перешло на index.html. У меня была похожая проблема, и мое решение состояло в том, чтобы просто поставить префикс всех URL-адресов маршрутизатора с константой, чтобы я мог обнаружить это на бэкэнде и переслать его. Мой код выглядит примерно так:

router := mux.NewRouter()
router.PathPrefix("/public/").Handler(http.StripPrefix("/public/", http.FileServer(http.Dir("public"))))
router.HandleFunc("/", handleIndex).Methods("GET")
router.HandleFunc("/h/{param:.*}", handleIndex).Methods("GET")

И в моем реакции-роутере я просто изменил все маршруты с {uri} на /h/{uri}

Если вы действительно хотите перенаправить все в реагирующий код без какой-либо серверной проверки на 404 или что-то еще, вы можете сделать:

router := mux.NewRouter()
router.NotFoundHandler = ... // Write a function to serve the index file here
fs := http.FileServer(http.Dir(dir))
router.PathPrefix("/").Handler(fs)

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