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
相关产品推荐
相关产品推荐

