在React中访问API JSON数据

时间:2018-11-23 23:20:00

标签: javascript reactjs api geolocation

我正在尝试通过使用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>
      );

  }

2 个答案:

答案 0 :(得分:2)

为什么我会收到错误消息,当我尝试调用API时,请求的资源上没有'Access-Control-Allow-Origin'标头? 我们非常重视Dark Sky的安全性。为了安全起见,我们已在服务器上禁用跨域资源共享(CORS)。

您的API调用将您的API秘密密钥包含在请求中。如果您要通过面向客户的代码进行API调用,那么任何人都可以提取并使用您的API密钥,这将导致您需要付费。我们禁用了CORS,以确保您的API秘密密钥保密。

为防止API密钥滥用,您应该设置代理服务器以在后台调用我们的API。然后,您可以向客户提供预测,而无需暴露您的API密钥。

您可以在这里https://darksky.net/dev/docs/faq

进行搜索

答案 1 :(得分:0)

您的问题是您要在前端公开API密钥。您必须从后端拨打电话。