为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
holdtom 2023-06-26 16:49:50
我试图用 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 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

我的猜测是您有一些静态内容,并且您希望将其他所有内容转发到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 here

fs := http.FileServer(http.Dir(dir))

router.PathPrefix("/").Handler(fs)


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信