【问题标题】:how to fetch data with nextjs from backend API end point in production如何从生产中的后端 API 端点使用下一个 js 获取数据
【发布时间】:2021-05-11 15:16:59
【问题描述】:

我被困了很长时间。对不起,如果这是一个愚蠢的问题和/或重复,但我没有在谷歌上找到任何东西。

基本上我完成了我的项目,我正在尝试在 Heroku 上部署它。

通常我会从这样的组件调用后端 API

fetch(http://localhost:8090/shop, {some code})

如果我想获取路线 /shop 的逻辑。

我能够在 Heroku 上部署所有内容,但没有调用 API 端点。

我尝试了以下方法:

  • http://localhost:8090/shop替换为${window.location.hostname}/shop
  • 替换为${window.location.host}/shop
  • 替换为${window.location.host}:8090/shop
  • 仅替换为/shop
  • 替换为e-commerce-my-shop/shop
  • 替换为https://e-commerce-my-shop/shop

这些解决方案都不适用于我的情况。为了调用正确的 API 端点,我需要在 fetch 中放入什么,然后将逻辑放置在该中间件中? Heroku 上的应用名称是 e-commerce-my-shop,所以 url 是 https://e-commerce-my-shop.herokuapp.com/

这是我第一次在平台上部署一些东西,如果这是一个愚蠢的问题,再次抱歉。

如果由于某些原因我违反了 stackoverflow 政策,请告诉我,我会更新我的问题。提前谢谢你。

【问题讨论】:

  • heroku 不是给你一个永久的实例 URL 吗?
  • 是的,是https://e-commerce-my-shop.herokuapp.com/,如果不清楚,请见谅
  • 您是否尝试过使用环境变量来设置 API 调用的基本 URL?

标签: reactjs next.js


【解决方案1】:

您应该将 URL 设置为 environment variable。您可以拥有本地和生产环境 .env 文件。当您构建应用程序时,下一步将使用生产文件。

因为您的调用是在浏览器中进行的,所以您需要在 env 变量前面加上 NEXT_PUBLIC

在您的根目录中,您需要使用文件名创建两个文件 - .env 和 .env.local - 每次添加或编辑变量时重新启动 Next。

.env.local - 开发

NEXT_PUBLIC_API_URL=localhost:8090

.env - 生产

NEXT_PUBLIC_API_URL=https://e-commerce-my-shop.herokuapp.com

您会在整个应用程序中都使用它

fetch(`${process.env.NEXT_PUBLIC_API_URL}/shop`, {some code})

当您将代码部署到 Heroku、GitHub Actions、AWS lambda 或其他无服务器平台等第三方服务时,通常不会像在开发计算机上那样自动包含环境变量。您可能需要set the env variables in their platform separately

最后,如果你使用 git,你永远不应该commit your .env files

【讨论】:

  • 为什么变量名需要以NEXT_PUBLIC开头?由于你在.env 中声明了变量,所以它可以是任何你想要的。
  • 我认为这是一种告诉 Next 哪里需要环境的方法 - 服务器或客户端。 - 如果变量仅在 API 中,则不需要前缀。由于客户端需要访问权限,因此必须添加前缀 -nextjs.org/docs/basic-features/…
  • 它没有解决我的问题(只是因为问题可能是其他问题)但我确实在我的代码中实现了这一点,我也不知道这一点。谢谢!
  • 我添加了一个更新 - 您可能不知道在 Heroku 中设置环境变量以匹配您的网站。
猜你喜欢
  • 2021-10-02
  • 2021-04-10
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2013-04-01
  • 2022-01-04
  • 2020-11-11
  • 2021-10-06
相关资源
最近更新 更多