繁体   English   中英

React 应用程序无法通过其请求在生产中访问我的快速应用程序,但在开发中运行良好

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM