在不同的端口

时间:2018-03-28 17:59:07

标签: node.js reactjs express proxy react-create-app

您好我在不同的端口上运行我的前端(create-react-app)和后端服务器(express.js)但在同一主机上。 例如:前端位于127.0.0.1:3000上,后端位于127.0.0.1:3003上。

在我的package.json中:

{...
 "proxy": "http://localhost:3003",
...}

一切正常,直到我没有将我的应用程序迁移到远程服务器。

当我尝试向服务器发送http请求(axios)时,我的应用程序开始意外刷新(可能是由于代理设置错误)。

所以我在35.125.320:10:3000上运行了前端应用,服务器正在35.125.320:10:3003上运行。我的http请求意外取消了。 (我检查了网络)。所以我将代理设置更改为

{...
  "proxy": "35.125.320:10:3003",
...} 

但无论如何,当我尝试制作http req时,我的应用仍然令人耳目一新。在服务器上。我认为问题是我无法访问我的快速后端服务器。因此,代理服务器会严重转发我的请求。

更新

场景:(我正在做两个帖子请求)

1)第一个请求仍然通过(应用程序未刷新)

2)相同的请求已通过(但有时会刷新应用程序)

3)第二个仍被浏览器取消。

问题

当前端服务器在不同的端口上运行但是在同一服务器和域上时,我的前端如何通过代理与后端服务器进行通信?

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

要公开您的应用,您需要制作生产版本。您在评论中提到您运行npm build,然后在express.js"中将此构建作为静态文件提供。这是让您的反应应用程序公开可用的好方法。正如它在create-react-app文档中所说:

  

npm startyarn start

     

以开发模式运行应用程序。

运行yarn startnpm start时,您还会收到一条通知,其中显示"请注意,开发版本未进行优化。"最好的选择是运行yarn buildnpm build并找到一种方法来提供这些静态文件。

答案 1 :(得分:0)

<强>解决方案:

问题是我在生产中使用了仅适合开发的代理。

我在express.js服务器中添加了这一行:

app.use(express.static(`${process.cwd()}/build`));
app.use(express.static(`${process.cwd()}/public`));

我构建并从我的构建文件夹中提供js,css文件。而且我还需要从我的公共文件夹中提供静态文件(图像,文件夹等)。

此问题还可能导致浏览器在生产时取消http请求。手段,请求无法到达服务器。