【发布时间】:2020-02-23 05:43:31
【问题描述】:
我有一个 React 客户端和一个 NODE.JS 服务器。
客户端在 3000 端口,服务器在 5000。
当我从客户端发出请求时,它看起来像这样:
import axios from "axios";
const axiosInstance = axios.create({
baseURL: "http://localhost:5000"
});
try {
const res = await axiosInstance.post("/api/myRoute", ....);
... more code
}
catch(...) {
}
问题是,当我将应用程序上传到 Heroku 时,即使我在 server.js ,process.env.PORT 中使用过,客户端也会收到 404 的 Axios 请求:
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server started on port ${PORT}`));
我们如何在 Heroku 上使用 Axios 而不将 localhost 指定为 baseUrl ?
【问题讨论】:
-
应用程序是如何部署到 Heroku 的? Dynos 不能绑定两个端口,那么后端服务于前端还是你有两个 dynos?如果是前者,我希望相对路由可以工作,不需要 baseURL(只需在 dev 中使用代理)。如果是后者,您需要告诉前端在哪里可以找到后端(对于 CORS,反之亦然)。但是,如果您希望客户端应用程序调用 客户端的 localhost 并在后端 Heroku 上进行调用,那么这没有任何意义。跨度>
-
您可以在 [环境变量])(create-react-app.dev/docs/adding-custom-environment-variables) 中设置 api url,因此生产版本将具有正确的基本 url。
-
由于这是 React 代码,它将在浏览器中运行。换句话说,
localhost将指向用户的机器,而不是 heroku 服务器。 -
@Chris G:这就是我要解决的问题......不想指定
localhost! -
1.放弃
baseURL设置。 2. 构建 react 应用 3. 将构建的文件复制到 node 应用的静态文件夹中 4. 将 node 应用部署到 heroku
标签: javascript node.js reactjs http axios