![](/img/trans.png)
[英]React Chat app works fine in Production but not in Development (Chat App) | React (with Materia-ui), Socket.io, Express
[英]React app can't reach my express app in production with its requests but works fine in development
我正在尝试通过 mywebsite.com/test 路由向我的快速后端发送一个简单的获取请求。 服务器应以 {"test": "test"} 响应。 这在本地主机上的开发中运行良好,但无论我在生产环境中尝试什么,我都无法从我的服务器获得响应。 我在带有 CentOS 7 的 GoDaddy VPS 上托管这个网站。react 应用程序在现场加载得很好,但我提出的任何请求都会返回一个带有标签的 html 文档,上面写着“你需要启用 JavaScript 才能运行这个应用程序”。 (我在 chrome devtools 的网络选项卡的响应部分看到了这个)
我已经使用来自 ssh 的节点运行后端,它说它正在侦听端口 5000。我已经向 package.json 添加了代理,以及这样的主页:
"proxy": "http://localhost:5000",
"homepage": "."
我尝试将主页字段也设为http://mywebsite.com ,但没有任何结果。
这是我的快速应用程序设置:
const express = require('express');
const PORT = process.env.PORT || 5000;
const app = express();
app.use(express.json());
app.get('/', function(req, res) {
res.status(200).send()
});
app.get('/test', (req, res) => {
res.status(200).json({test: "test"});
})
app.listen(PORT, async function() {
console.log(`Listening on Port ${PORT}`);
});
在开发中,我按预期在网络选项卡中收到了这个:
{"test":"test"}
在这一点上我完全不知所措,感觉就像我已经尝试了一切。
解决了。 原来我的问题出在我的 .htaccess 文件中。
我知道如果我有 VPS,我不应该使用 .htaccess,但是对于处理 VPS 还是很陌生,这是我的问题:
<IfModule mod_rewrite.c>
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.html [L]
</IfModule>
由于我们的 React 路由器存在问题,我添加了这个。 这解决了这个问题,但结果重写了我所有的后端请求。 删除后,我设法添加了这条规则:(来自: 我有 Godaddy 共享虚拟主机我需要托管 node.js 网站可以托管网站吗? )
RewriteRule (.*) http://localhost:5000/$1 [P,L]
DirectoryIndex index.html
这让一切重新开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.