node.js - 我是否必须使用 ngrok 来公开 MERN 堆栈的前端和后端才能使 CRUD 操作正常工作?

标签 node.js reactjs mongodb express ngrok

我正在本地计算机上开发 MERN 应用程序。

前端位于 localhost:3000

后端位于 localhost:3003

我的前端代码中有一个请求,如下所示:

axios.get('localhost:3000/comments', params)

现在,我使用 ngrok 来公开应用程序,如下所示:

ngrok 启动 front_end back_end

我的 .yml 配置文件如下所示:

tunnels:
    front_end:
        proto: http
        addr: 3000
        subdomain: fakedomaintest
    back_end:
        proto: http
        addr: 3003
        subdomain: fakedomaintestback

我的问题是,我是否必须以不同的方式公开后端,或者我是否错误地分割了堆栈?

当我公开 localhost:3000 和 localhost:3003 时,我编辑前端代码中的 CRUD 行以匹配 ngrok URL,如下所示:

axios.get('fakedomaintestback.ngrok.io/comments', params)

访问后 fakedomaintest.ngrok.io 它有效......

但是有没有一种更简单的方法,让我不必每次想使用 ngrok 进行远程原型(prototype)时都在前端编辑 CRUD 行?

我在这里缺少什么?

最佳答案

如果您的应用程序在 localhost:3003 上运行,那么您的 axios 调用应该是 axios.get('localhost:3003/comments', params)

解决 url 切换问题:

您可以使用 dotenv 为您的应用程序设置环境变量。

https://www.npmjs.com/package/dotenv

它的工作原理是您在 React 应用程序的根文件夹中创建一个 .env 文件,其中包含以下内容:

BACKEND_HOST=localhost:3003

然后在您的代码中,您可以将所有网络调用更改为以下内容:

axios.get(`${process.env.BACKEND_HOST}/comments`, params)

当您想切换到使用 ngrok 时,只需更改 .env 文件中的值即可。

如果您碰巧使用 Create React App,则已经支持 .env 文件,但您必须在所有变量前添加 REACT_APP 前缀,因此 BACKEND_HOST 将变为 REACT_APP_BACKEND_HOST

关于node.js - 我是否必须使用 ngrok 来公开 MERN 堆栈的前端和后端才能使 CRUD 操作正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60329063/

相关文章:

MongoDB/Mongoose 对单个文档的原子读写

Mongodb 地理位置边界搜索/查询

javascript - 使用正则表达式在 javascript 中将每个出现的链接替换为其特定的 href 对象( map 链接 -> a href=link)

css - 使用 webpack 为不同的主题构建单独的样式表

reactjs - 组件不能用作 JSX 组件。它的返回类型 'Element[]' 不是有效的 JSX 元素

html - 使用 Flex-box 为 Material-UI 制作两个相同高度的网格元素

node.js - 如何使用具有模糊版本匹配的私有(private)(git repo)npm 依赖项?

javascript - 是否可以使 mongoDb objectId 大于 24 个字符?

javascript - 在 grunt 中丑化子任务不起作用

node.js - mongodb、express.js 应用部署最佳实践