微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于 MERN 堆栈应用程序中客户端和后端之间的连接问题,未提供静态文件

如何解决由于 MERN 堆栈应用程序中客户端和后端之间的连接问题,未提供静态文件

我正在尝试将 MERN 堆栈应用程序部署到 DigitalOcean Droplet。我的后端在 Nginx 服务器上运行并成功连接到 MongoDB 图集实例。我使用 FileZilla 来提供我的静态文件,并且这些文件成功地在我没有请求服务器的路由上提供。但是在向服务器发出请求(从 MongoDB 获取、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;
    }
}

详细步骤在这里:

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04#set-up-nginx-as-a-reverse-proxy-server

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。