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

EJS搭配SQLite数据库for循环渲染数据报[object Object]错误解决方法

问题根因

你的代码存在两处核心错误,直接导致输出异常和页面崩溃:

  • 遍历取值逻辑错误:daten是SQLite返回的所有查询结果构成的对象数组,不是单条数据,直接在循环中输出整个数组时,JS将对象强制转为字符串就会显示[object Object]。
  • 循环边界越界:JS数组索引从0开始计数,有效索引范围是0 到 数组长度-1,你写的判断条件i <= daten.length会让循环多执行一次,最后一轮循环时i等于数组长度,取到的daten[i]是undefined,此时读取.Name属性会直接触发类型错误,导致页面运行崩溃。
修复方案
  1. 先确认后端传参正确:使用SQLite查询完成后,需要将返回的结果数组作为daten参数传入EJS模板,以node环境常用的sqlite3包为例,后端参考代码如下:
// 数据库查询逻辑
db.all("SELECT Name, 其他需要的字段 FROM 你的业务表名", (err, queryResult) => {
  if (err) {
    // 自行处理查询错误
    console.error(err);
    return res.status(500).send("数据库查询失败");
  }
  // 将查询结果数组赋值给daten,传给EJS模板
  res.render("你的模板文件路径", { daten: queryResult });
});
  1. 修改EJS模板中的循环代码,修正边界条件,遍历过程中通过索引取出当前单条记录再读取字段:
<% for (let i = 0; i < daten.length; i++) { %>
  <!-- 输出Name字段,其他字段同理通过daten[i].字段名调用即可 -->
  <div>姓名:<%= daten[i].Name %></div>
<% } %>

如果不想手动维护索引,也可以直接用更简洁的for...of写法,从根源避免索引越界问题:

<% for (const record of daten) { %>
  <div>姓名:<%= record.Name %></div>
<% } %>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:42:20