Express服务器未在我的React生产版本上运行

时间:2018-10-15 15:28:30

标签: node.js reactjs express npm

我有一个用create-react-app制作的React应用程序,我试图在Express服务器上运行。在运行npm start时工作正常,但是在运行npm run build然后运行serve -g build时,我只能连接到本地主机上的端口5000,而不能连接到我在快速服务器中设置的8080。

  

server.js

const express = require('express');
const jsonServer = require('json-server')
const path = require('path');
const app = express();
app.use(express.static(path.join(__dirname, 'build')));

app.get('/ping', function (req, res) {
 return res.send('pong');
});

app.get('/', function (req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

app.get('/remote', function (req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

app.use('/api', jsonServer.router('./src/config.json'));

app.listen(process.env.PORT || 8080);

我还设置了我的代理服务器和主服务器

  

package.json

"main": "server.js",
"proxy": "http://localhost:8080",

我该如何做?

1 个答案:

答案 0 :(得分:1)

正如您正确地说的那样,proxy指令在开发模式下与npm start一起很好地工作。

此外,正如您正确地说的,serve -g build命令可以在localhost:5000中正确地服务于您的生产版本。

出于主要目的,即在快递服务器中提供生产版本,您需要使用以下命令生成生产版本:

npm run build

然后将其提供给您的服务器端点之一,如下所示:

app.use(express.static(path.join(__dirname,'/build')));
app.get('/', function (req, res, next) {
    res.sendFile(path.resolve('build/index.html'));
});

别忘了以以下方式启动服务器

node server.js

希望有帮助!