【问题标题】:Connect existing nodejs express API with react-admin将现有的 nodejs express API 与 react-admin 连接起来
【发布时间】:2018-12-23 06:35:55
【问题描述】:

我有一个现有的 nodejs 和 express API 用于购物车。我想将此 API 与 react-admin 集成。 https://github.com/marmelab/react-admin。 我已将以下代码添加到 app.js 文件以从数据库加载类别。

// in src/App.js
import React from 'react';
import { Admin, Resource } from 'react-admin';
import restProvider from 'ra-data-simple-rest';

import { CategoriesList } from './categories';

const App = () => (
  <Admin dataProvider={restProvider('http://localhost:5000/api')}>
    <Resource name="categories" list={CategoriesList} />
  </Admin>
);

export default App;

但它不断抛出以下错误:

HTTP 响应中缺少 Content-Range 标头。简单的 REST 数据提供者期望资源列表的响应包含此标头以及构建分页的结果总数。如果您使用的是 CORS,您是否在 Access-Control-Expose-Headers 标头中声明了 Content-Range?

另外,修改服务器端的代码以包含这些标头,如下所示:

/**
 * GET request to retrieve all categories
 */
router.get('/api/categories', async (req, res) => {
    try {
        const categories = await Category.find({});
        res.setHeader('Access-Control-Expose-Headers', 'Content-Range');
        res.setHeader('Content-Range', 5);
        res.send({ data: categories, total: 5 });
    } catch (error) {
        console.log(`error in getting categories ${error}`);
    }
})

以前有没有人使用过 react-admin。我在这里错过了什么?

谢谢

【问题讨论】:

  • 嗨,你怎么能解决你的问题?我遇到了同样的错误,请您帮帮我吗?

标签: node.js reactjs express react-admin


【解决方案1】:

是的,您的 Content-Range 标头错误。它必须具有以下格式:

Content-Range: categories 0-5/5

https://github.com/marmelab/react-admin/tree/master/packages/ra-data-simple-rest

【讨论】:

  • 我修改了以下代码: res.setHeader('Access-Control-Expose-Headers', 'Content-Range'); res.setHeader('内容范围', '类别 0 - 5 / 5'); res.send({ 数据: 类别, 总数: 5 });但是还是不行。
  • 以下代码在服务器端有效: const categories = await Category.find({}); res.setHeader('Access-Control-Expose-Headers', 'Content-Range'); res.setHeader('内容范围', categories 0 - 2 / ${categories.length}); res.send(类别);但是在客户端渲染时,它给出了以下错误:警告:数组或迭代器中的每个孩子都应该有一个唯一的“key”道具。并且不会呈现多个类别。
  • 这可能是因为您的资源没有 id 属性。如果您有一个未命名为 id 的标识符字段,那么您必须在您的 dataProvider 中翻译它。见marmelab.com/react-admin/…
  • 是的,这些更改有效。但是下面这行代码: res.setHeader('Content-Range', categories 0 - 5 / ${categories.length});不会以任何方式影响分页。那么在 react-admin 中分页是如何工作的呢?
猜你喜欢
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 2019-11-13
  • 2019-01-13
  • 2021-08-22
  • 2012-08-17
  • 2021-09-15
  • 2017-11-07
相关资源
最近更新 更多