如何使用go服务(正确)反应路由器?

时间:2019-06-19 19:28:30

标签: go react-router

我正在尝试为go充当React-Router,我已经做到了,但是我遇到了麻烦,我认为我做的方法不正确,或者它不完整。我正在使用Mux。我遇到的麻烦是,当我在应用程序中按下<Link>时,它会正确更改视图,但是当我尝试直接从浏览器中更改它或尝试重新加载页面时,出现404错误< / p>

我尝试了不同的方法,我实际上是这样做的:

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

答案 0 :(得分:2)

我的猜测是您拥有一些静态内容,并且您希望其他所有内容都转发到index.html。我有一个类似的问题,我的解决方案是在所有react-router 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")

然后在我的react-router中,我将所有路由从{uri}更改为/h/{uri}

如果您真的想将所有内容转发到react代码,而无需任何后端检查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)