繁体   English   中英

在 heroku 上托管 React + Node.js 应用程序时出现问题

[英]Problem hosting React + Node.js app on heroku

当我在本地处理我的项目时(没有问题),我执行在端口 3000 上工作的 npm start,我还必须打开另一个终端并执行在端口 4000 上工作的 node server/server.js。然后我就可以工作了用我的浏览器连接我的前端和后端。 现在我正在尝试在 heroku 上托管这个项目,但没有运气。 这是我的错误:

2020-08-26T11:54:23.905587+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=whatever.herokuapp.com request_id="whatever" fwd="96.20.56.73" dyno=web.1 connect=1ms service=159ms status=503 bytes=0 protocol=https

和 package.json:

    {
  "name": "library",
  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:4000",
  "dependencies": {
    "@material-ui/core": "^4.9.9",
    "@material-ui/icons": "^4.9.1",
    "@material-ui/lab": "^4.0.0-alpha.48",
    "@material/react-snackbar": "^0.15.0",
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.4.0",
    "@testing-library/user-event": "^7.2.1",
    "chai": "^4.2.0",
    "clsx": "^1.1.0",
    "cookie-parser": "^1.4.4",
    "dotenv": "^8.2.0",
    "google-maps-react": "^2.0.2",
    "hookrouter": "^1.2.3",
    "i18next": "^19.4.1",
    "i18next-browser-languagedetector": "^4.0.2",
    "i18next-xhr-backend": "^3.2.2",
    "immer": "^5.3.6",
    "mongo-seeding": "^3.4.1",
    "mongodb": "^3.5.3",
    "multer": "^1.4.2",
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-facebook-login": "^4.1.1",
    "react-google-login": "^5.1.1",
    "react-hook-google-maps": "0.0.3",
    "react-i18next": "^11.3.4",
    "react-redux": "^7.1.3",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.4.0",
    "redux": "^4.0.5",
    "redux-immer": "^1.0.4",
    "sha1": "^1.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "mocha --exit",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "eslint": "^6.8.0",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-react": "^7.19.0",
    "eslint-plugin-react-hooks": "^3.0.0",
    "eslint-plugin-react-redux": "^3.0.3",
    "mocha": "^7.2.0",
    "supertest": "^4.0.2"
  }
}```

是代理的原因吗? 或者我有一个错误的启动脚本? 或者是其他东西?

我正在使用 create-react-app + JSX,所以我必须打开两个终端,一个用于 npm start(在端口 3000 上用于反应服务器)和一个用于节点 server.js(用于端口 4000 上的后端),这两个是通过连接我在 package.json 上的代理。 当我完成开发后,我所要做的就是:

  1. 从 package.json 中删除代理。

  2. npm run build,它将我的所有代码复制到 build 文件夹中。

  3. app.use("/", express.static("build")); 在我的 server.js 文件中,使应用程序可以访问构建文件夹。

  4. app.all("/*", (req, res) => { res.sendFile(__dirname + "/build/index.html"); }); 在 server.js 的末尾捕获所有内容。

希望这可以节省您的一些时间。

我在heroku上部署的方式是:

  1. 到我添加的后端 package.json 脚本
"heroku-postbuild": "cd client && npm install && npm install --only=dev --no-shrinkwrap && npm run build"
  1. 将以下内容添加到我的 server.js
if (process.env.NODE_ENV === "production") {
  app.use(express.static(path.join(__dirname, "client/build")));
  app.get("*", (request, response) => {
    response.sendFile(path.join(__dirname, "client/build", "index.html"));
  });
}

在这些之后,我只是git push heroku master并且它在没有任何问题的情况下被部署。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM