我正在尝试通过使用ip-api来获取用户当前的纬度和经度,并将其传递到darksky api URL中以获取天气JSON数据来构建一个天气应用。我的经纬度记录很好,但是Darksky调用出现以下错误。我试图从一个API提取数据并使用另一个API来做错什么吗?还是只是我尝试做的方式?
-获取'dark sky api url'401
-通过CORS策略阻止从原点“ https://api.darksky”到“ http://localhost:3000 ....”处的获取 >
getLocation = async (e) => {
e.preventDefault();
const api_call = await fetch("http://ip-api.com/json");
const data = await api_call.json();
console.log(data.lat, data.lon);
let lattitude = data.lat;
let longitude = data.lon;
const weather_call = await fetch(`https://api.darksky.net/forecast/${API_KEY}/${lattitude},${longitude}`);
const weather_data = await weather_call.json();
console.log(weather_data);
}
render() {
const {to, getLocation, ...rest} = this.props;
return (
<div className="App">
<Landing getLocation={this.getLocation}/>
</div>
);
}
答案 0 :(得分:2)
为什么我会收到错误消息,当我尝试调用API时,请求的资源上没有'Access-Control-Allow-Origin'标头? 我们非常重视Dark Sky的安全性。为了安全起见,我们已在服务器上禁用跨域资源共享(CORS)。
您的API调用将您的API秘密密钥包含在请求中。如果您要通过面向客户的代码进行API调用,那么任何人都可以提取并使用您的API密钥,这将导致您需要付费。我们禁用了CORS,以确保您的API秘密密钥保密。
为防止API密钥滥用,您应该设置代理服务器以在后台调用我们的API。然后,您可以向客户提供预测,而无需暴露您的API密钥。
进行搜索答案 1 :(得分:0)
您的问题是您要在前端公开API密钥。您必须从后端拨打电话。