我正试图建立一个电子商务网站与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格式的数据,没有任何错误。已经几个小时了,一切看起来都很好,但仍然没有工作。
2条答案
按热度按时间hgncfbus1#
首先也是最重要的,当从你的API中获取时,你不需要调用完整的url(例如,'localhost'),你只需要从
/api/more/params
开始调用我还认为首先值得阅读(并且可能会回答您的问题)有关
getServerSideProps
的文档当您想从服务器获取数据时,可能会尝试获取API路由,然后从getServerSideProps调用该API路由。这是一种不必要且效率低下的方法,因为它会导致由于getServerSideProps和API路由都在服务器上运行而产生额外的请求。
虽然这可能不能完全解决问题,鉴于当时缺乏进一步的细节,这两个建议肯定应该是一个良好的开端,让我们继续解决这个问题!
ttvkxqim2#
Changing "localhost" to "127.0.0.1" fixed it for me
参考:
strapi FetchError: request to http://localhost:1337/api/events failed, reason: connect ECONNREFUSED ::1:1337