【发布时间】:2021-03-10 14:22:21
【问题描述】:
这个问题已经被问过很多次了,我已经检查了这个问题的所有常见原因 - 仍然无法解决这个问题。有关常见原因和尝试的解决方案,请参阅下面的调试步骤。
我有一个 React 应用程序(由 create-react-app 构建)、一个 Node Express 服务器,我将它们部署在 Heroku 上.
整个回购是公开的here。
您可以查看直播制作页面here。
这是问题:
React 应用加载正常。在应用程序加载时,我们对“GET /api/haikus”进行 API 调用,这会返回错误。 (view App.js code)
API 调用的错误为Unexpected token < in JSON。我们检查网络响应,并查看我们的 React 应用的 index.html 页面。
我还使用 PostMan 直接执行 GET /api/haikus 以查看我的浏览器或 react 是否在搞乱它。我仍然得到相同的响应(即 index.html 页面)。
对于 Express 应用,这通常意味着您的路由顺序错误(例如,app.get("*", ...) 在您的 API 路由之前被命中)。
所以我检查了我的server.js 文件中的路线。它们的顺序正确,/api 路由高于一般 * 路由。
那么为什么我的服务器不匹配任何路由仅在生产中?
【问题讨论】:
-
你的服务器在 8080 上运行,并且你不是服务器端渲染,你的域指向你的静态文件夹但你需要你的 nginx 代理 /api/ 到你的端口 8080
-
这里不是反对者,但您的路线似乎都不起作用,但默认路线。你确定你在那里部署了 github 代码吗?如果你注释掉这个默认的
*路由呢? -
@SomeoneSpecial - 我的服务器仅在开发中的 8080 上运行。在生产环境中,它可以在 Heroku 提供的任何 env var 端口上运行。查看 server.js,我们有条件地监听环境端口。另外我没有使用 Nginx。
-
@WiktorZychla - 感谢您的想法,如果我注释掉
*路由,则 React 应用程序根本无法按预期提供。当我离开*路由时,添加到 server.js 的 console.log 仍然显示路由被命中。 -
我认为您的 API 根本没有运行。原因可能是未连接到数据库。你能检查一下heroku日志(heroku日志尾巴)