您好我在不同的端口上运行我的前端(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)第二个仍被浏览器取消。
问题
当前端服务器在不同的端口上运行但是在同一服务器和域上时,我的前端如何通过代理与后端服务器进行通信?
感谢您的回答。
答案 0 :(得分:0)
要公开您的应用,您需要制作生产版本。您在评论中提到您运行npm build,然后在express.js"中将此构建作为静态文件提供。这是让您的反应应用程序公开可用的好方法。正如它在create-react-app文档中所说:
npm start
或yarn start
以开发模式运行应用程序。
运行yarn start
或npm start
时,您还会收到一条通知,其中显示"请注意,开发版本未进行优化。"最好的选择是运行yarn build
或npm build
并找到一种方法来提供这些静态文件。
答案 1 :(得分:0)
<强>解决方案:强>
问题是我在生产中使用了仅适合开发的代理。
我在express.js服务器中添加了这一行:
app.use(express.static(`${process.cwd()}/build`));
app.use(express.static(`${process.cwd()}/public`));
我构建并从我的构建文件夹中提供js,css文件。而且我还需要从我的公共文件夹中提供静态文件(图像,文件夹等)。
此问题还可能导致浏览器在生产时取消http请求。手段,请求无法到达服务器。