尝试在Goodreads API上搜索书籍信息。同时,我试图将数据从xml转换为json。搜索书籍
时出现此错误所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:3000”。
和警告
跨域读取阻止(CORB)阻止了MIME类型为application / xml的跨域响应https://www.goodreads.com/search/index.xml?key=PL6saHk8cIrLeeLG3eylg&q=halo。有关更多详细信息,请参见https://www.chromestatus.com/feature/5629709824032768。
我安装了xml2js软件包并将其放入我的函数中
searchBooks = async (e) => {
e.preventDefault();
const search = this.state.search;
try {
let res = await axios.get(
`https://www.goodreads.com/search/index.xml?key=PL6saHk8cIrLeeLG3eylg&q=${search}`
);
let xml = res.data;
parseString(xml, (error, res) => {
this.setState({
books: res.data
});
});
} catch (error) {
this.setState({ error });
}
console.log(this.state.books);
};
我需要解决什么?
答案 0 :(得分:0)
GoodReads API不允许您从前端进行API调用。 (请参阅此GoodReads forum question)。 您需要从后端服务(例如,nodejs服务器)发出API请求,或通过代理。
设置代理可能很麻烦,因此您可以使用YQL(雅虎的查询语言)客户端来调用API。
这是解决方法。
⚠️警告:这不是一个好习惯,但出于学术目的请在此处编写。 请考虑设置自己的后端服务以调用API。
直接调用YQL可能很麻烦,因此您可以使用另一个名为proxyfy-url的库,它为您提供了一个近似的YQL URL。
var proxify = require('proxify-url');
...
get proxyfiedUrl() {
// GoodReads API returns result in "XML" format.
// "XML" is the "input" format fed into YQL
let proxyUrl = proxify(this.url, { inputFormat: 'xml' });
return proxyUrl;
}
无耻的插头!
如果您想了解更多信息,我在我的博客上写了关于同一问题的信息
How to call GoodReads API using YQL