Node.js+Sequelize关联查询后前端无法获取嵌套audios与votes数组数据问题求助
解决嵌套数组数据获取问题(Sequelize + Handlebars)
从你提供的返回数据结构和代码来看,核心问题是**audios和votes都是数组类型(即使只有一个元素)**,但你在Handlebars模板里直接用.访问属性,忽略了数组需要遍历的特性。下面分两部分给出解决方案:
1. 前端Handlebars模板修正
你的后端已经正确返回了嵌套的数组结构,但前端模板需要对应使用嵌套的{{#each}}循环来遍历数组元素。修改后的模板代码如下:
{{#each folderWiseReport}} <tr> <!-- 遍历当前文件夹下的所有音频 --> {{#each this.audios}} <td>{{this.aTitle}}</td> <td>{{this.aImage}}</td> <!-- 遍历当前音频下的所有投票记录 --> {{#each this.votes}} <td>{{this.vottingNum}}</td> <td>{{this.totalVote}}</td> <td>{{this.voteCount}}</td> <td>{{this.failSafe}}</td> {{/each}} {{/each}} </tr> {{/each}}
为什么这样改?
- 从你返回的JSON可以看到,
audios是一个包含单个对象的数组:"audios": [ {...} ],不是单个对象,所以必须用{{#each this.audios}}遍历每个音频项。 - 同理,每个音频里的
votes也是数组,需要再嵌套一层{{#each this.votes}}来访问投票数据。
2. 确认后端Sequelize关联配置(可选但关键)
虽然你的后端已经返回了嵌套数据,但为了确保关联逻辑正确,检查一下模型之间的关联定义是否符合一对多关系:
// AudioFolder 模型与 Audio 模型的关联(一对多) AudioFolder.hasMany(Audio, { foreignKey: 'folderId', // 需与你的数据库外键字段一致 as: 'audios' // 必须和你include里的别名一致(如果没指定as,默认是模型名复数) }); // Audio 模型与 Vote 模型的关联(一对多) Audio.hasMany(Vote, { foreignKey: 'audioId', // 需与你的数据库外键字段一致 as: 'votes' });
你的include配置已经正确指定了模型和属性,nest: true也确保了返回结构是嵌套的,这部分不需要修改,只要关联定义正确即可。
测试建议
可以先在控制器里console.log(folderWiseReport),确认返回的audios和votes确实是数组结构,再结合修改后的模板进行测试,就能正常获取嵌套数据了。
内容的提问来源于stack exchange,提问作者freelanceing mindset
相关产品推荐
相关产品推荐

