Cors发布了React

时间:2017-10-23 22:26:12

标签: reactjs api cors axios

我正在调用第三方API,我认为已经提供了CORS访问权限。当我通过一个带有axios的简单节点应用程序调用它时,它可以正常工作并提供数据。

const axios= require('axios');

let games = [];
let getTodayGames = () => {axios.get('http://data.nba.net/v2015/json/mobile_teams/nba/2017/scores/00_todays_scores.json')
    .then(function (response) {
        let result = response.data;
        console.log(result);
        games = result.gs.g;
        console.log(games[0].v.tn);
    })
    .catch(function (error) {
        console.log(error);
    });
};

getTodayGames();

但是当我在带有axios的React App中调用它时,它给了我CORS错误:

  

无法加载http://data.nba.net/v2015/json/mobile_teams/nba/2017/scores/00_todays_scores.json:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://127.0.0.1:8080'因此不允许访问。

class Games extends React.Component {
constructor(props) {
    super(props);
    this.state = {
        games: []
    };
}

componentDidMount() {
    let url='http://data.nba.net/v2015/json/mobile_teams/nba/2017/scores/00_todays_scores.json';
    axios.get(url)
        .then(res => {
            const games = res.data;
            this.setState({ games });
        });
}
....

我在SO中阅读了很多回复,但没有解决问题。我无法控制API。 React应用程序将作为静态网站(无服务器管理)托管在AWS S3中,因此我不认为代理解决方案的答案会有所帮助。 谢谢。

2 个答案:

答案 0 :(得分:0)

您需要使用附加正确CORS标头的服务。达瓦尔在那里的评论中提到了一个。另一个是crossorigin.me

答案 1 :(得分:0)

如果您要为没有后端的静态网站提供服务,您别无选择,只能使用第三方代理服务器。 CORS由客户端的浏览器启动,您无法解决这个问题。 CORS的重点是防止跨站点脚本攻击或会话劫持。