为什么我的静态网页显示404?

时间:2019-12-29 06:22:44

标签: amazon-web-services go server

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

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

如何让我的其他端口玩得开心?我无法弄清楚这里缺少什么。

以下是我的服务器代码的摘录:

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)

任何人都知道我缺少什么吗?预先感谢!

1 个答案:

答案 0 :(得分: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返回的错误,以防止程序无提示失败