【发布时间】:2017-11-14 04:51:59
【问题描述】:
我一直在构建简单的反应应用程序,它显示以下 crytowat.ch api。 https://api.cryptowat.ch/markets
这是我的 redux-observable Epic 代码
const cryptowatchEpic = action$ =>
action$.ofType(FETCH_PRICE).mergeMap(action =>
ajax({
url: `${baseUrl}${action.payload}/btcusd/price`,
crossDomain: true,
method: 'GET',
headers: {
'Access-Control-Request-Origin': 'https://api.cryptowat.ch/'
},
withCredentials: true
}).map(response => fetchPriceFilled(response))
);
这是控制台错误
XMLHttpRequest 无法加载 https://api.cryptowat.ch/markets/kraken/btcusd/price。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:3000' 不允许访问。响应的 HTTP 状态代码为 405。
我认为在标题中传递了Access-Control-Request-Origin,但出现错误。有什么我错过的吗?
提前致谢
【问题讨论】:
-
看起来该 api 不打算在浏览器中使用。检查 cryptowatch 是否提供浏览器友好的 API,或者如果没有,您必须在后端服务中实现这些调用。
-
您仍然可以通过 CORS 代理发出请求,从前端代码中使用该 API;试试
url: `https://cors-anywhere.herokuapp.com/${baseUrl}${action.payload}/btcusd/price`(当然删除headers: { 'Access-Control-Request-Origin': 'https://api.cryptowat.ch/' })
标签: ajax cors rxjs redux-observable