node.js - 由于 MERN 堆栈应用程序中客户端和后端之间的连接问题,未提供静态文件
问题描述
我正在尝试将 MERN 堆栈应用程序部署到 DigitalOcean 液滴。我的后端在 Nginx 服务器上运行,并成功连接到 MongoDB atlas 实例。我使用 FileZilla 来提供我的静态文件,并且这些文件在我没有请求服务器的路由上成功提供。但是在向服务器发出请求的路由上(从 MongoDB 到 GET、POST、PUT 或 DELETE 记录),页面加载了几毫秒,然后由于无法从 API 获取数据相关的错误,一切都消失了。由于后端正在运行并连接到 MongoDB,我认为我传递给 Axios 的 URL 可能不正确。我在前端 package.json 中定义了一个代理值,如下所示:
"proxy": "HTTP://localhost:5000"
我提出的要求如下:
axios.get('/api/members')
它在我的本地机器上运行良好。但是,我在 stackoverflow 线程的某处读到代理仅在开发模式下生效,而不是在生产模式下生效。所以我从 package.json 文件中删除了代理,并将 axios 请求更改为:
axios.get('[IP_to_the_droplet]/members']
我不确定这是否正确,我认为不是,因为在我的前端带有 HTTP 请求的路由仍然不起作用。您认为问题与 HTTP 请求有关吗?你知道我应该如何解决这个问题吗?
先感谢您
解决方案
您通常需要一个反向代理服务器来将 localhost:5000 映射到 droplet 的 IP。您可以在 Nginx 中轻松设置反向代理。这是你如何做到的。
您将使用守护程序启动应用程序以在 localhost:5000 上广播,这将是您的 Nginx 配置
. . .
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
详细步骤在这里:
推荐阅读
- python - 从另一个函数调用mongodb时如何模拟它?
- database - DynamoDB 全局表复制延迟
- java - PreparedStatementSetter 问题
- php - PHP - 获取 xml 值并返回条件值
- javascript - Google SignIn SDK 因抛出错误而失败,发生不可恢复的登录失败 -catch 错误:React Native
- javascript - JavaScript 在 mac OS、iphone 中不起作用
- typo3 - 自动清除父页面缓存
- node.js - 代理存在时 Node.js 套接字挂断
- html - 在 ahk/html 脚本中更改图像颜色
- dygraphs - Dygraph:永久突出显示特定数据点