同时运行Express和Create-React-App问题

时间:2017-10-18 05:37:16

标签: javascript node.js reactjs express heroku

我使用Express和Create-React-App(http://myfirst-reactapp.herokuapp.com/)构建了一个简单的基本应用程序。我的项目分为两部分:一部分是服务器(它有一个package.json和一个index.js文件),另一部分是客户端(使用npm create-react-app创建)。

我试图将用户从服务器端重定向到客户端(例如localhost:5000 / test将重定向到localhost:3000 / test),但在将其部署到 Heroku 后,我得到了跟随错误,找不到解决问题的答案:

  

未捕获的SyntaxError:意外的令牌<

index.js

const express = require('express');
const app = express();
const path = require('path');

if (process.env.NODE_ENV === 'production') {
    app.use(express.static('/client/build'));

    app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
}

const PORT = process.env.PORT || 5000;
app.listen(PORT);

package.json(server)

{
  "name": "heroku_base",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "engines": {
    "node": "6.11.2",
    "npm": "3.10.10"
  },
  "scripts": {
    "start": "node index.js",
    "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.2"
  }
}

1 个答案:

答案 0 :(得分:1)

您正在为快速服务器的每个请求返回index.html文件。

尝试删除此代码

app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});

另外,你应该更换

app.use(express.static('/client/build')); 

类似

app.use(express.static(path.join(__dirname, 'client/build')));