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

EJS遍历Qr模型redirect子文档提示不可迭代错误求助

问题修复:qr.redirect is not iterable 类型错误

核心原因

你的控制器里用了Qr.find()方法,它返回的是匹配条件的Qr文档数组,而非单个Qr对象。但EJS模板里直接把qr当成单个对象去访问redirect属性,数组本身没有redirect属性,自然会抛出“不可遍历”的错误。

修复方案

根据业务需求选择以下两种方案之一:

方案1:获取单个Qr文档

如果查询逻辑只需要返回一个匹配的Qr文档,将控制器里的find()改为findOne():

module.exports.showActivations = async (req, res) => {
    // findOne返回单个文档,而非数组
    const qr = await Qr.findOne({ user: user._id });
    res.render('users/activations', { qr });
};

此时模板原代码可正常工作,因为qr已经是带有redirect数组的单个Qr对象。

方案2:处理多个Qr文档

如果需要返回多个Qr文档,模板需先遍历外层的qr数组,再遍历每个文档的redirect子数组:

<% for (let qrDoc of qr) {%>
    <% for (let item of qrDoc.redirect) {%>
        <h1><%= item.name %> </h1>
    <% } %>
<% } %>

控制台现象解释

console.log(qr)显示[ [Object] ]是因为Node.js打印数组时默认简化嵌套对象显示;而console.log(qr[1])直接取出数组里的单个Qr文档,所以能看到完整结构。这个现象正好印证了控制器传递的qr是数组,这就是模板报错的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:15:41