You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:12:28