javascript FetchError: request to http://localhost:1337/api/products failed, reason: connect ECONNREFUSED 127.0.0.1:1337

hfyxw5xn  于 2023-01-08  发布在  Java
关注(0)|答案(2)|浏览(388)

我正试图建立一个电子商务网站与Next.JS和Strapi。每当我试图请求数据从Strapi到Next.JS,我总是得到错误:-

FetchError: request to http://localhost:1337/api/products?populate=* failed, reason: connect ECONNREFUSED 127.0.0.1:1337

链接中的 *?populate=**用于接收所有数据,我也尝试过不使用它。
这是我如何请求数据:-

export async function getServerSideProps() {
  let data = await fetch('http://localhost:1337/api/products?populate=*', {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer api-token',
    },
 });
 let products = await data.json();
 return {
   props: { products },
 };
}

我看了很多类似的问题,但是什么都没找到,我检查了很多次,但是还是不行,但是当我用*thunder client*用同样的API令牌请求时,它给我一个状态:200,而且我还收到了JSON格式的数据,没有任何错误。已经几个小时了,一切看起来都很好,但仍然没有工作。

hgncfbus

hgncfbus1#

首先也是最重要的,当从你的API中获取时,你不需要调用完整的url(例如,'localhost'),你只需要从/api/more/params开始调用

export async function getServerSideProps() {
  // next api routes use a proxy under the hood,
  // so you just need to call `/api/` then the rest of the params :)
  let data = await fetch('/api/products?populate=*', {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer api-token',
    },
 });
 let products = await data.json();
 return {
   props: { products },
 };
}

我还认为首先值得阅读(并且可能会回答您的问题)有关getServerSideProps的文档
当您想从服务器获取数据时,可能会尝试获取API路由,然后从getServerSideProps调用该API路由。这是一种不必要且效率低下的方法,因为它会导致由于getServerSideProps和API路由都在服务器上运行而产生额外的请求。
虽然这可能不能完全解决问题,鉴于当时缺乏进一步的细节,这两个建议肯定应该是一个良好的开端,让我们继续解决这个问题!

相关问题