在React中的AWS API上的GET请求

时间:2018-06-30 02:35:09

标签: reactjs api amazon-web-services cors

我正在尝试通过一个简单的react应用访问AWS API,但出现了CORS错误。我要做的就是访问数据,然后显示它并允许用户对其进行组织。当我将数据的网址插入浏览器时,该信息将完美显示。

我的API文件如下:

const beerURL = "https://s3.amazonaws.com/....";

//Grab all the data from the API so we can use it in our application
export default {
searchBeer: () => {
   return fetch(beerURL)
 }
}

在我的App.js文件中,我这样拨打电话:

import API from "./utils/API";

class App extends Component {

constructor(props) {
  super(props);
  this.state = {
    beer: []
  }
}

componentDidMount() {
  this.loadData();
}

loadData = () => {
  Promise.all([
    API.searchBeer()
  ])
  .then(response => {
    this.setState({ beer: response });
  })

}

render() {
  ...

}

这是我需要为其设置CORS服务器的东西吗?我不明白为什么我需要为一个简单的GET请求这样做。

2 个答案:

答案 0 :(得分:0)

相同来源仅对于具有相同来源的资产请求成功,所有其他请求将被拒绝。

cors将允许请求具有相同来源和其他来源的资产,并返回适当的CORs标头。

cors-with-forced-preflight将始终在进行实际请求之前执行预检检查。

no-cors旨在向没有CORS标头的其他来源发出请求,并导致响应不透明,但是如上所述,目前在窗口全局范围内这是不可能的。

要定义模式,请在获取请求中添加一个options对象作为第二个参数,然后在该对象中定义模式:

fetch('http://some-site.com/cors-enabled/some.json', {mode: 'cors'})
  .then(function(response) {
    return response.text();
  })
  .then(function(text) {
    console.log('Request successful', text);
  })
  .catch(function(error) {
    log('Request failed', error)
  });

答案 1 :(得分:0)

该API似乎是允许的,并以Access-Control-Allow-Origin作为响应:*

我还没有弄清楚是什么原因导致了您的问题,但我不认为这仅仅是获取API。

您可以像下面那样更改代码

const beerURL = "https://s3.amazonaws.com/....";

fetch(beerURL)
   .then( response => response.json() )
   .then( data => console.log(data) )