无法在 ReactJS 从 Rails 获取数据

Posted

技术标签:

【中文标题】无法在 ReactJS 从 Rails 获取数据【英文标题】:Cannot fetch data from Rails at ReactJS 【发布时间】:2020-02-27 10:12:09 【问题描述】:

我使用的前端源是端口 5555 的 ReactJS,我的后端是端口 8888 的 Rails。我试图通过使用以下方法从 Rails 获取数据:

const url = 'http://localhost:8888/problems';
fetch(url)
  .then(res => 
    res.json();
  )
  .then(response => 
    console.log(response);
  )
  .catch(error => 
    console.log(error);
  );

但我收到了消息:

Access to fetch at 'http://localhost:8888/problems' from origin 'http://localhost:5555' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我不知道那个错误。请帮我解决它

【问题讨论】:

您从浏览器收到 CORS 错误。您的 Rails 服务器需要设置标题 Access-Control-Allow-Origin: *。这是因为由于端口不同,您的网页和服务器在技术上是不同的来源。 跟reactjs没关系。是CORS问题,在rails中查看如何处理:***.com/questions/29751115/… @Benjamin 我应该在哪里设置? 【参考方案1】:

阅读更多关于CORS

要解决此问题,您需要在 Gemfile 中添加 rack-cors gem gem 'rack-cors'

config/application.rb

# Rails 5

config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :options]
  end
end

# Rails 3/4

config.middleware.insert_before 0, "Rack::Cors" do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :options]
  end
end

这对您当地的人来说就足够了。如果您部署代码,则需要对其进行修改。

【讨论】:

【参考方案2】:

正如评论所说,这是一个 CORS 错误。

你可以根据这个问题allow-anything-through-cors-policy修复它

【讨论】:

以上是关于无法在 ReactJS 从 Rails 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 ReactJs、Axios、Redux 渲染/显示从 api 获取的数据

ReactJS:从 rails 传递参数以将路由器反应到组件

如何在 ReactJS 中将数据从 API 渲染到表(函数组件)

无法从响应 ReactJS 中获取 X-custom-header

Rails:为循环的每次迭代从表中获取数据

在reactjs中使用基于类的组件时无法呈现数据列表