【问题标题】:Backend Node.js Server not functioning in Heroku Deployment后端 Node.js 服务器在 Heroku 部署中不起作用
【发布时间】:2021-09-23 14:46:34
【问题描述】:

我在将带有 Node.js 后端服务器的 React 应用程序部署到 Heroku 时遇到问题。我制作的应用程序允许用户将比赛成绩发布到 mongodb 数据库,并且可以从数据库中检索和显示所有结果。在本地运行此应用程序时,我使用两个服务器端口,Localhost: 3000 用于前端 React 和 Localhost: 4000 用于后端节点服务器。在本地运行此应用程序时,我可以通过硬编码 localhost:4000 URL 来使其工作,以便 axios 调用数据库。删除 axios 调用的 Localhost:4000 部分会使调用默认为 localhost:3000,这让我认为 axios 调用在 Heroku 部署中没有正确路由。此外,当 axios 调用设置为 Localhost:4000 URL 时,如果后端服务器在我的本地计算机上启动,Heroku 应用程序可以正常工作。

我认为这里的问题是后端服务器没有在 Heroku 部署中运行,并且可能还需要修改路由。我是这些部署的新手,因此我们将不胜感激!

后端服务器: https://github.com/Bensonm3/Max-a-thon-Results/blob/master/backend/server.js

创建运动员组件: https://github.com/Bensonm3/Max-a-thon-Results/blob/master/src/components/create-athlete.component.js

已部署的应用程序: https://max-a-thon-results.herokuapp.com/

【问题讨论】:

  • 您可以通过环境变量设置端口值。因此,当您将其部署到 Heroku 时,请从 cli 或网站设置环境变量
  • 不,heroku 设置端口

标签: node.js reactjs heroku


【解决方案1】:

您的应用程序正在开发模式下运行。您必须使用您的 nodejs 服务器为您的应用程序提供服务。

进行重构

在你的 server.js 中添加这段代码

    // server.js
    app.use(express.static(path.join(__dirname, 'build')));
    
    app.get('/', function (req, res) {
      res.sendFile(path.join(__dirname, 'build', 'index.html'));
    });
   // comment this code when you run in local

并在你的 package.json 中像这样添加heroku post build

//package.json
 "scripts": {
    "start": "node backend/server.js",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false && npm install && npm run build"
  },

【讨论】:

    【解决方案2】:

    通常,API 和前端是分开托管的。分别部署你的 React 应用和 Express 应用。然后您可以轻松访问您的后端路由。

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2020-07-31
      • 2021-10-07
      • 2022-01-15
      • 2016-10-04
      相关资源
      最近更新 更多