【问题标题】:Node Express paths are not being matched on production (Heroku)Node Express 路径在生产环境中不匹配(Heroku)
【发布时间】: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日志尾巴)

标签: node.js reactjs express


【解决方案1】:

怎么了!问题是 Heroku 运行不同的命令来在他的服务器上运行您的应用程序,

在您向我们展示的仓库中

您没有运行后创建的build文件夹

npm run build

并且您在同一个文件夹中同时拥有服务器代码和反应代码!!

请分离服务器文件夹并响应不同的文件夹。

我不能给你快速的解决方案,因为部署是一个漫长的过程但是这是你需要经历的,以便部署和让你的应用程序工作 p>

查看本指南,了解如何上传这是我能给你的最佳解决方案

Article

如果你愿意

我很乐意帮助您进行视频通话

Gmail 谷歌遇见 dolev146@gmail.com

------------------编辑

看看我给你做的这个视频!

How to Deploy to heroku YouTube video

【讨论】:

  • 嘿多列夫!欣赏答案。因此,“heroku-postbuild”在应用程序部署到 heroku 后创建构建文件夹。将服务器代码和反应代码放在同一个根文件夹中也很好,尽管人们通常会有完全独立的存储库 - 这本身不会造成问题。问题原来是我的 package.json 中定义的“npm start”命令仍在使用静态文件服务器(名为 Serve 的 NPM 包),而不是实际启动我的节点服务器。
【解决方案2】:

已经编写了 server.js 文件以提供静态文件以进行反应(构建文件夹)并提供 API 响应。但是在您的 package.json 文件中,我只能看到您正在运行“serve -s build”,它将为反应文件提供服务,而不是触发提供 API 响应的节点服务器。

因此,您可能必须将 server.js 作为“npm start”脚本运行,它将同时提供 API 和反应文件(来自构建文件夹)。

所以尝试如下更改 package.json 中的 npm 脚本并重新部署到 heroku。

"start": "node server.js",

【讨论】:

  • 啊有趣 - 让我试一试,然后回复你!
  • 您要进行视频通话吗?我会帮你尽快解决这个问题! dolev146@gmail.com
  • 嘿@IRSHAD,就是这样!不敢相信我没有仔细检查我在 package.json 中的实际操作,谢谢。
猜你喜欢
  • 2022-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2017-12-27
  • 2020-06-23
  • 1970-01-01
  • 2018-08-25
  • 2020-12-04
相关资源
最近更新 更多