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

如何读取Sequelize查询返回的JSON数据并在Handlebars模板中渲染

问题根因

你遇到的问题由两个原因共同导致:

  1. Sequelize 查询默认返回的是模型类的实例对象,不是普通 JS 纯对象,即使你用 JSON.stringify 打印结果正常,嵌套的关联属性 Behaviors 仍然是 Sequelize 实例,Handlebars 直接读取时无法正确解析属性值。
  2. 你写的 Handlebars 属性访问语法存在错误,多余的点号会导致属性解析失败,最终直接输出实例对象的 toString 结果 [object SequelizeInstance:Behavior]。
解决方法

步骤1:将Sequelize实例转换为纯JSON对象

修改路由代码,传递给模板前调用 Sequelize 实例的 toJSON() 方法,将整个对象(包括嵌套的关联数据)转为普通 JS 纯对象:

router.get('/findBehavior/:student_id', async (req, res) => {
    console.log("---> req.params.student_id :" + JSON.stringify(req.params.student_id));

    const student = await Student.findByPk(req.params.student_id,{
        include: Behavior,
    });

    console.log("---> student :" + JSON.stringify(student));
    // 新增toJSON()调用
    res.render('profile', {student: student.toJSON(), session: req.session});
});

步骤2:修正Handlebars模板语法

去掉属性访问路径中多余的点号和引号,以下是正确的读取示例:

单个属性读取

<!-- 读取学生姓名 -->
<p>学生姓名:{{student.student_name}}</p>
<!-- 读取第一条行为记录的ID -->
<p>首条行为ID:{{student.Behaviors.[0].behavior_id}}</p>
<!-- 读取第一条行为记录的名称 -->
<p>首条行为名称:{{student.Behaviors.[0].behavior_name}}</p>
<!-- 读取关联表StudentBehavior的属性 -->
<p>关联记录学生ID:{{student.Behaviors.[0].StudentBehavior.student_id}}</p>

遍历所有行为记录

如果要展示该学生的所有行为,直接使用 each 循环即可:

<ul>
{{#each student.Behaviors}}
  <li>
    行为ID:{{behavior_id}},行为名称:{{behavior_name}}
    <br>
    关联记录学生ID:{{StudentBehavior.student_id}}
  </li>
{{/each}}
</ul>

内容的提问来源于stack exchange,提问作者Gianni Fontanot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:24:03