Node.js React Admin:使用";getList";,我得到了一个“答案”;错误:无法读取属性';地图';“未定义”的定义;

Node.js React Admin:使用";getList";,我得到了一个“答案”;错误:无法读取属性';地图';“未定义”的定义;,node.js,rest,api,react-admin,Node.js,Rest,Api,React Admin,使用react admin,我试图从API Restful节点服务器获取用户列表,出现以下错误: 错误:无法读取未定义的属性“map” 下面是serveruser.controller.js中的getUsers: const getUsers=catchAsync(async(req,res)=>{ const users=await userService.getUsers(req.query); const data=users.map(user=>user.transform()); c

使用
react admin
,我试图从API Restful节点服务器获取用户列表,
出现以下错误:

错误:无法读取未定义的属性“map”
下面是server
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('X-Total-Count',总计);
response='{data:'+JSON.stringify(data)+',total:'+total+'}';
res.send(响应);
});
此处收到的数据
响应

{
数据:[
{“id”:“5E6F5E3B4CF60A67701EEAE”,“电子邮件”:admin@test.com,“firstname”:“Ad”,“lastname”:“Min”,“role”:“admin”},
{“id”:“5E6F5E3B4CF60A67701EEAF”,“电子邮件”:test@test.com,“firstname”:“Jhon”,“lastname”:“Doe”,“role”:“user”}
],
总数:2
}
react admin
中,
dataProvider.js中的
getList

导出默认值{
getList:(资源,参数)=>{
控制台日志(params);
const{field,order}=params.sort;
常量查询={
…fetchUtils.flattObject(params.filter),
肮脏的:场
};
constURL=`${apirl}/${resource}?${stringify(查询)}`;
返回httpClient(url)。然后({headers},json)=>({
数据:json,
总计:parseInt(
标题
.get(“内容范围”)
.拆分(“/”)
.pop(),
10
)
}));
},
更新: UserList.tsx

import React from "react";
import {
  TextField,
  Datagrid,
  DateInput,
  Filter,
  List,
  EmailField,
  SearchInput
} from "react-admin";
import { useMediaQuery, Theme } from "@material-ui/core";
import SegmentInput from "./SegmentInput";
import MobileGrid from "./MobileGrid";

const UserFilter = (props: any) => (
  <Filter {...props}>
    <SearchInput source="q" alwaysOn />
    <DateInput source="createdAt" />
    <SegmentInput />
  </Filter>
);

const UserList = (props: any) => {
  const isXsmall = useMediaQuery<Theme>(theme => theme.breakpoints.down("xs"));
  return (
    <List
      {...props}
      filters={<UserFilter />}
      sort={{ field: "createdAt", order: "desc" }}
      perPage={25}
    >
      {isXsmall ? (
        <MobileGrid />
      ) : (
        <Datagrid optimized rowClick="edit">
          <TextField source="id" />
          <EmailField source="email" />
          <TextField source="firstname" />
          <TextField source="lastname" />
          <TextField source="role" />
          <DateInput source="createdAt" />
          <DateInput source="updatedAt" />
        </Datagrid>
      )}
    </List>
  );
};

export default UserList;
从“React”导入React;
进口{
TextField,
数据网格,
日期输入,
过滤器,
列表
EmailField,
搜索输入
}从“react admin”;
从“@material ui/core”导入{useMediaQuery,Theme}”;
从“/SegmentInput”导入SegmentInput;
从“/MobileGrid”导入MobileGrid;
const UserFilter=(道具:any)=>(
);
const UserList=(道具:any)=>{
const isXsmall=useMediaQuery(theme=>theme.breakpoints.down(“xs”));
返回(
{isXsmall(
) : (
)}
);
};
导出默认用户列表;
下面是一些getList示例的文档:

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

谢谢和问候 卢多

下面是一个关于
reactjs
中的
map()
的示例

这在
nodejs

在你的情况下,让我们仔细看一下:

//user.controller.js
const getUsers=catchAsync(async(req,res)=>{
//实际上,首先声明用户可能更明智
+让用户=[];
//您等待用户(查询)被解析或拒绝,酷
-const users=await userService.getUsers(req.query);
//然后我们像以前一样分配“用户”
+users=wait userService.getUsers(req.query);
//但在这里,map()要求在迭代之前定义用户。
//因此,为了让这项工作发挥作用,我们需要首先解决用户的价值,对吗?
-const data=users.map(user=>user.transform());
//你能把上面这行改成这行吗?
//这不是因为我们提供了map(),一个同步参数(函数)
-const data=Promise.all(users.map(user=>user.transform());
//好的,为了便于理解,请将其分解
//让我们声明一个userList,在这里我们给map()一个“异步”参数
//此时,userList将是一个“承诺数组”
+const userList=users.map(异步用户=>user.transform());
//现在我们解决了所有的承诺,我们应该有干净的数据
+const data=wait Promise.all(用户列表);
});
通过这一更改,我们确保
map()
用户
解决后运行。

这对您有用吗?让我知道。

您能提供在客户端呈现此
组件的代码片段吗?我怀疑问题就在那里。好的,问题可能来自这一行
const data=users.map(user=>user.transform())
。在某些情况下,
用户
是未定义的。请参阅下面的答案。我已经用呈现用户列表的代码进行了更新。好的,看到了。它看起来很干净。然后我们应该关注服务器端(nodejs)。让我们评估并更新下面的答案。感谢您的编辑。这与更改不起作用,我得到相同的错误,数据响应为
{data:{},total:2}
尝试最新的更改。这将对我们的挑战进行排序。如果可能,请分享您遇到的错误类型,以防它们与原始错误不同。谢谢。我尝试了最新的更改,(我还添加了用户模型中缺少的createdAt和updatedAt…),我得到了相同的错误,数据响应:
{data:[{“id”:“5e71fba1c259111c00f847c0”,“电子邮件”:admin@test.com“,“firstname”:“Ad”,“lastname”:“Min”,“role”:“admin”,“createdAt”:“2020-03-18T10:44:49.393Z”,“updatedAt”:“2020-03-18T10:44:49.393Z”},{“id”:“5e71fba1c259111c00f847c1”,“电子邮件”:”test@test.com,firstname:“Jhon”,“lastname:“Doe”,“role:“user”,“createdAt:“2020-03-18T10:44:49.411Z”,“updatedAt:”2020-03-18T10:44:49.411Z“}],总计:2}
好的,至少有进展。看起来这个服务器端(
nodejs
)现在很好,对吧?哦,我意识到有
user.transform()
。我们可能也需要对其进行故障排除。让我回复一下。在新的更新中,我得到了相同的错误,数据响应似乎很好:
{数据:[{“id”:“5e71fba1c259111c00f847c0”,“电子邮件”:admin@test.com,firstname:“Ad”,“lastname:“Min”,“role:“admin”,“createdAt:“2020-03-18T10:44:49.393Z”,“updatedAt:“2020-03-18T10:44:49.393Z”},{“id:“5e71fba1c259111c00f847c1”,“email”