部署到 Heroku 时如何更改 localhost API URL?

How to change localhost API URL when deployed to Heroku?

提问人:dreyau 提问时间:1/12/2023 更新时间:1/12/2023 访问量:520

问:

我已经部署了一个服务器端渲染 React 应用程序(捆绑了没有 CRA):

  • 它有一个用于服务器端渲染的 Express 服务器(侦听端口 3000 或process.env.PORT)
  • 它有一个用于服务前端的 API 的快速服务器(侦听端口 8080 或process.env.PORT)

在 localhost 上,前端发出请求以获取数据,这非常有效。http://localhost:8080/api

据我了解,当应用程序处于生产状态时,基本 API URL 应该是应用程序的 URL(例如。https://myapp.herokuapp.com)而不是 ,所以我在我的代码中添加了以下更改:http://localhost:8080

  • 如果应用处于 dev 状态,则前端调用http://localhost:8080/api
  • 如果应用程序处于 prod 中,则前端调用(我在 Heroku 中添加为配置变量)https://myapp.herokuapp.com/apihttps://myapp.herokuapp.com/

但是,它不起作用。我的应用已成功部署到 Heroku,并且 SSR 正确呈现,但 API 调用失败。(我也尝试过失败的)https://myapp.herokuapp.com/api:3000

当应用处于生产状态时,调用本地服务器的 API URL 应该是什么?

多谢!

reactjs heroku localhost web-deployment 服务器端

评论


答:

0赞 Berkeli 1/12/2023 #1

好吧,据我所知,Heroku 不允许多个端口,您将无法为 Web 打开 3000 和 为 api 打开 8080。

您可以在同一端口上同时提供服务,并路由到 api。/api

我曾参与过一个使用类似方法的项目,以下是代码:

app.use('/api', router); // every api route is in the router
app.use(express.static(staticDir));

它也被部署到 heroku。

如果您想看一看,请完整回购 - https://github.com/berkeli/breteau-dashboard/blob/main/server/utils/createServer.js