我正在尝试为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”等)中提供相同的目录。
答案 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)