使用Prisma时JS提示对象未定义,但console.log父对象正常显示
问题解决:Prisma查询后访问嵌套对象报错
你的问题出在查询结果的结构理解错误:
你通过prisma.projectMembers.findMany查询时,select配置只指定返回project字段,所以userProjects数组里的每个元素结构是{ project: { id, title, user: {...} } }——也就是说,你要的项目数据被包裹在一层project属性里,而非直接挂载在顶层。
而你的map函数里直接访问project.id、project.user,自然会提示“未定义”,因为这些属性都在project.project路径下。
修改后的代码
const userProjects = await prisma.projectMembers.findMany({ where: { userId: token._id }, select: { project: { select: { id: true, title: true, user: { select: { id: true, name: true, }, }, }, }, }, }); const formattedProjects = userProjects.map(item => { // 先取出嵌套的项目对象 const project = item.project; console.log(project); console.log(project.user); return { id: project.id, title: project.title, user: project.user.id, }; });
补充说明
你控制台打印的project其实是外层的{ project: {...} }对象,展开后能看到内层的项目数据,但直接访问顶层属性时自然找不到。只要调整访问路径,就能解决“对象未定义”的报错。
内容的提问来源于stack exchange,提问作者AwiJol
相关产品推荐
相关产品推荐

