EJS搭配SQLite数据库for循环渲染数据报[object Object]错误解决方法
问题根因
你的代码存在两处核心错误,直接导致输出异常和页面崩溃:
- 遍历取值逻辑错误:
daten是SQLite返回的所有查询结果构成的对象数组,不是单条数据,直接在循环中输出整个数组时,JS将对象强制转为字符串就会显示[object Object]。 - 循环边界越界:JS数组索引从0开始计数,有效索引范围是
0 到 数组长度-1,你写的判断条件i <= daten.length会让循环多执行一次,最后一轮循环时i等于数组长度,取到的daten[i]是undefined,此时读取.Name属性会直接触发类型错误,导致页面运行崩溃。
修复方案
- 先确认后端传参正确:使用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 }); });
- 修改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
相关产品推荐
相关产品推荐

