ruby-on-rails 无法从react-admin访问rails开发的API

mcdcgff0  于 4个月前  发布在  Ruby
关注(0)|答案(2)|浏览(49)

在rails app中,使用这个文件:
config/initializers/cors.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'

    resource '*',
    headers: :any,
    methods: [:get, :post, :put, :patch, :delete, :options, :head],
    expose: ['X-Total-Count']
  end
end

字符串
此后端在http://localhost:3001上运行。
在前端,在react-admin源代码中:
src/App.js

import React from 'react';
import { Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';
import { PostList } from './posts';

const dataProvider = jsonServerProvider('http://localhost:3001');

const App = () => (
  <Admin dataProvider={dataProvider}>
    <Resource name="posts" list={PostList} />
  </Admin>
);

export default App;


它运行在http://localhost:3000。
当访问前端http://localhost:3000/#/posts时,从Chrome浏览器控制台获得错误:
警告:缺少键的翻译:“HTTP响应中缺少X-Total-Count标头。jsonServer数据提供程序要求资源列表的响应包含此标头以及用于构建分页的结果总数。如果您使用CORS,是否已在X-Control-Expose-Headers标头中声明X-Total-Count?”
即使在后台设置了expose: ['X-Total-Count'],它也显示missing,为什么?

qncylg1j

qncylg1j1#

查看有关数据提供程序的文档。https://marmelab.com/admin-on-rest//RestClients.html
您的rails可能与您尝试使用的jsonServerProvider提供程序不兼容。jsonServerProvider不适用于生产使用。它更像是一个测试/示例提供程序,用于json-server兼容的假休息端点。
如果某个预构建的提供程序不适合您的需要,您需要编写自己的传输。

7rtdyuoh

7rtdyuoh2#

试试这个:

class Api::YourResourceController < ApplicationController
  before_action :add_header

  def index
    # ...
    response.headers['X-Total-Count'] = your-records.size
    # render json data
  end

  private
  def add_header
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
    headers['Access-Control-Request-Method'] = '*'
    headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
    headers['Access-Control-Allow-Credentials'] = 'true'
    headers['Access-Control-Expose-Headers'] = 'X-Total-Count'
  end
end

字符串
对我有用!

相关问题