使用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
我不明白,请问我需要帮助,怎么了?
感谢与问候卢多
这里是具有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
。那对你有用吗?让我知道。