下一篇.js:获取错误:JSON 响应正文无效 JSON 中位置 0 处出现意外令牌<



我正试图使用getStaticProps来简单地发出请求,然后将数据从中传递给组件:

但我得到了这个错误:

FetchError:处的json响应体无效https://www.ajmadison.com/product3.0/packages.index.json.php?sku=RF28R7351SR原因:意外的令牌<在位置0 的JSON中

import AppliancePackage from '../components/AppliancePackage.jsx';
function HomePage({ data }) {
return (
<>
<AppliancePackage appliances={data} />
</>
);
}
export default HomePage;
// This function gets called at build time on server-side.
// It won't be called on client-side, so you can even do
// direct database queries. See the "Technical details" section.
export async function getStaticProps() {
// Call an external API endpoint to get data.
// You can use any data fetching library
var res = await fetch(
'https://www.ajmadison.com/product3.0/packages.index.json.php?sku=RF28R7351SR'
);
var json = await res.json();
data = JSON.stringify(json);
console.log('data ', data);
return {
props: {
data: json,
},
};
}

我试着把它串起来,但没用!此外,我对以下评论有点困惑:

此函数在服务器端的构建时被调用。它不会在客户端调用,所以您甚至可以直接数据库查询。参见";技术细节";部分

然后,正如您所看到的,有一条评论指出:

调用外部API端点以获取帖子。

但是在他们的文档中有一整节关于API路由

有人能帮我吗?怎么了?

更新

阿列克谢贡献了一些很好的见解,但就像我对他说的那样,我在axios文档中找不到改变用户代理的方法!

阿列克谢让我走上了正轨!谢谢我的朋友!

最后你必须这样做:

export async function getStaticProps() {
// Call an external API endpoint to get posts.
// You can use any data fetching library
var res = await axios.get(
'https://www.ajmadison.com/product3.0/packages.index.json.php?sku=RF28R7351SR',
{
headers: {
Accept: 'application/json, text/plain, */*',
'User-Agent': '*',
},
}
);
var res = JSON.stringify(res.data);
console.log('res ', res);
// By returning { props: posts }, the Blog component
// will receive `posts` as a prop at build time
return {
props: {
data: res,
},
};
}

这是在添加标题:

headers: {
Accept: 'application/json, text/plain, */*',
'User-Agent': '*',
},

和任何User-Agent*

我认为您所指的端点出于某种原因对"用户代理";。

当我尝试像这样用CURL获取它时,它返回了一些HTML响应(当然这不是有效的JSON(

curl https://www.ajmadison.com/product3.0/packages.index.json.php?sku=RF28R7351SR

但通过这种方式,它确实工作并返回JSON,就像通过浏览器访问一样:

curl -H "User-Agent: some browser" https://www.ajmadison.com/product3.0/packages.index.json.php?sku=RF28R7351SR  

TLDR:尝试添加";用户代理";标题到您的请求。

对我来说,是.json()调用了HTTP错误,在响应体中返回HTML

不要在api file中使用res.status(200).json(data),而是使用res.status(200).json(JSON.stringify(data))。这将消除控制台中的JSON错误。这对我有效。

我认为数据没有从末尾提取,这就是为什么。我面临着同样的问题,我重新启动了我的系统和网络,它能很好地恢复

最新更新