开发者问题收集

访问 React 应用程序中的 API 时出错

2018-03-08
173

这是我在浏览器中访问 API 时收到的错误。 错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

这是我的 app.js 文件。我基本上是在尝试使用随机引号生成器 API。这是代码。

import React, { Component } from 'react';

import './App.css';
const PATH_BASE='https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en';
class App extends Component {

   getquotes=()=>{
     fetch(`${PATH_BASE}`)
     .then((resp)=>resp.json())
     .then(function(data){
       console.log(data);
     })
     .catch(() => console.log("Can’t access " + PATH_BASE + " response. Blocked by browser?"))


   }
  componentDidMount=()=>{
    this.getquotes()
  }
  render() {
    return (
      <div className="App">
      <h1>Random Quote </h1>
      </div>
    );
  }
}

export default App;
1个回答

就像 epascarello 所说的那样,托管资源的服务器需要启用 CORS。您可以在客户端执行的操作(可能也是您正在考虑的操作)是将获取模式设置为 CORS(尽管我认为这是默认设置):

    fetch(request, {mode: 'cors'});

但是,这仍然需要服务器启用 CORS,并允许您的域请求资源。

查看 CORS 文档,以及这个解释同源策略的精彩 Udacity 视频。

您也可以在客户端使用 no-cors 模式,但这只会给您一个不透明的响应

import React, { Component } from 'react';

import './App.css';
const PATH_BASE='https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en';
class App extends Component {

   getquotes=()=>{
     fetch(`${PATH_BASE}`,{mode: 'no-cors'})
     .then((resp)=>resp.json())
     .then(function(data){
       console.log(data);
     })
     .catch(() => console.log("Can’t access " + PATH_BASE + " response. Blocked by browser?"))


   }
  componentDidMount=()=>{
    this.getquotes()
  }
  render() {
    return (
      <div className="App">
      <h1>Random Quote </h1>
      </div>
    );
  }
}

export default App;
user3805605
2018-03-08