猿问

如何使用 go 来(正确地)提供 React-router 服务?

我试图用 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”等。


holdtom
浏览 119回答 1
1回答

jeck猫

我的猜测是您有一些静态内容,并且您希望将其他所有内容转发到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")在我的反应路由器中,我刚刚将所有路线从 更改{uri}为/h/{uri}如果你真的想将所有内容转发到反应代码而不进行任何后端检查 404 或任何其他内容,你可以这样做:router := mux.NewRouter()router.NotFoundHandler = ... // Write a function to serve the index file herefs := http.FileServer(http.Dir(dir))router.PathPrefix("/").Handler(fs)
随时随地看视频慕课网APP

相关分类

Go
我要回答