【问题标题】:Why do I get a 404 for my static webpage?为什么我的静态网页会出现 404?
【发布时间】:2019-12-29 15:49:45
【问题描述】:

我在开发全栈应用程序方面已经工作了大约 2 年(当我最初接触这些应用程序时,这些应用程序已经相当成熟),并且正在从头开始我的第一个应用程序。我花了一天时间创建一个 EC2 实例,为我的堆栈加载依赖项(Postgres、golang、react),以及一台闪亮的新机器所需的所有其他装饰(tmux、npm、vim 插件、git 集成等)。我现在卡住了。 我使用 create-react-app 开始我的前端并运行 npm start 进行构建。要看到这个,我可以去我的 instanceip:3000。 我创建了在 8080 端口上提供服务的 golang 服务器代码,我可以通过访问 instanceip:8080/hello 来访问我的 helloworld 代码。 我在我的反应代码中添加了一个 axios 调用来获取返回 404 的端点 /hello。

我还尝试让我的 golang 将 index.js 作为 instanceip:8080 的静态页面处理,并返回 404。

如何让我的不同端口玩得更好?我无法弄清楚我在这里缺少什么。

这是我在 main 中的服务器代码的 sn-p:

indexLoc := os.Genenv(webRootEnv) + "/index.html" // verified this is the correct path to my static index.html file by logging it out
fs := http.FileServer(http.Dir(indexLoc))
http.ListenAndServe(":8080", nil)
http.Handle("/", fs)

有人知道我缺少什么吗?提前致谢!

【问题讨论】:

  • 您将文件 (index.html) 的路径提供给 http.Dir,该文件需要指定一个目录名称。也许这可能是原因?另外,你应该在ListenAndServe之前调用http.Handle

标签: amazon-web-services go server


【解决方案1】:

有两个原因可能是:

  • 您正在为 http.Dir 提供一个文件名,它需要一个目录。
  • 您的处理程序在调用ListenAndServe 后被注册,因此使其无用(永远不会调用http.Handle)

你可以通过改变你的代码来修复它:

indexLoc := os.Genenv(webRootEnv) // webRootEnv is a directory path
fs := http.FileServer(http.Dir(indexLoc))
http.Handle("/", fs) // register handler before listening
http.ListenAndServe(":8080", nil)

您可能还想处理从ListenAndServe 返回的错误,以防止您的程序静默失败

【讨论】:

  • 太棒了,谢谢。我做了所有这些事情,现在它从我的静态 index.html 提供服务,尽管在我的 npm 构建期间没有更新(我希望我的应用程序主体在其中被我的反应代码替换)。我在想我需要一些自定义构建脚本或使用已经存在的库来正确处理它??
  • 为什么没有更新?如果文件是在其他地方生成的,您也可以自动复制它们。这实际上取决于您的设置以及文件的生成/构建方式
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 2014-07-28
  • 2020-02-26
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多