У меня есть существующий nodejs и экспресс-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;
Но он продолжает выдавать следующие ошибки:
Заголовок Content-Range отсутствует в HTTP-ответе. Простой поставщик данных REST ожидает, что ответы для списков ресурсов будут содержать этот заголовок с общим количеством результатов для построения разбивки на страницы. Если вы используете CORS, объявляли ли вы Content-Range в заголовке Access-Control-Expose-Headers?
Кроме того, изменил код на стороне сервера, чтобы включить эти заголовки, как показано ниже:
/**
* 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.info(`error in getting categories ${error}`);
}
})
Кто-нибудь работал раньше с response-admin. Что мне здесь не хватает?
Спасибо





Да, у вас неправильный заголовок 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 ('Content-Range', 'категории 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 (категории); Но при рендеринге на стороне клиента выдается следующая ошибка: Предупреждение: каждый дочерний элемент в массиве или итераторе должен иметь уникальную "ключевую" опору. и не отображает более одной категории.
Вероятно, это потому, что в ваших ресурсах нет опоры id. Если у вас есть поле идентификатора без имени id, вы должны перевести его в свой dataProvider. См. marmelab.com/react-admin/…
да, эти изменения работают. Но следующая строка кода: res.setHeader ('Content-Range', categories 0 - 5 / ${categories.length}); никак не влияет на пагинацию. Так как же пагинация работает в react-admin?
привет как бы вы могли решить вашу проблему? У меня такая же ошибка. Не могли бы вы мне помочь?