React-Admin getList无法读取未定义的属性'map'

问题描述 投票:1回答:1

使用React-Admin,我试图从API Restfull Node服务器获取用户列表。

我有一个错误:

Cannot read property 'map' of undefined

这里是服务器user.controller.js中的getUsers:

const getUsers = catchAsync(async (req, res) => {
  const users = await userService.getUsers(req.query);
  const data = users.map(user => user.transform());
  const total = users.length;
  res.type('json');
  res.set('Access-Control-Expose-Headers', 'Content-Range');
  res.set('Content-Range', `users 0-2/${total}`);
  //res.set('Access-Control-Expose-Headers', 'X-Total-Count');
  res.set('X-Total-Count', total);
  response = '{ data: ' + JSON.stringify(data) + ', total: ' + total + ' }';
  res.send(response);
});

这里收到的数据响应:

{
 data: [
 {"id":"5e6f5e3b4cf60a67701deeae","email":"[email protected]","firstname":"Ad","lastname":"Min","role":"admin"},
 {"id":"5e6f5e3b4cf60a67701deeaf","email":"[email protected]","firstname":"Jhon","lastname":"Doe","role":"user"}
 ],
 total: 2 
}

在react-admin中,位于dataProvider.js中的getList:

export default {
  getList: (resource, params) => {
    console.log(params);
    //const { page, perPage } = params.pagination;
    const { field, order } = params.sort;
    const query = {
      ...fetchUtils.flattenObject(params.filter),
      sortBy: field
      //order: order,
      //start: (page - 1) * perPage,
      //end: page * perPage,
    };
    const url = `${apiUrl}/${resource}?${stringify(query)}`;
    return httpClient(url).then(({ headers }, json) => ({
      data: json,
      total: parseInt(
        headers
          .get("Content-Range")
          .split("/")
          .pop(),
        10
      )
    }));
  },

这里是有关getList的示例的文档:https://marmelab.com/react-admin/DataProviders.html#writing-your-own-data-provider

我不明白,请问我需要帮助,怎么了?

感谢与问候卢多

undefined react-admin
1个回答
0
投票

这里是具有detailed explanation of what's happening功能的map()

就您而言,让我们在这里仔细看一下:

// user.controller.js

const getUsers = catchAsync(async (req, res) => {
  // You await for users (querying) to be resolved or rejected, cool
  const users = await userService.getUsers(req.query);

  // But here, map() requires users to be defined before iteration.
  // So for this to work, we need the value of users to be resolved first, right?
  - const data = users.map(user => user.transform());

  // Could you change the above line to this, and see?
  + const data = Promise.all(users.map(user => user.transform()));
});

进行此更改后,我们确保在解析map()之后运行users。那对你有用吗?让我知道。

© www.soinside.com 2019 - 2024. All rights reserved.