翡翠无法阅读财产'长度'在每个循环中未定义

时间:2014-11-12 10:41:19

标签: node.js pug

我的控制器中有这个代码从mongo中检索一个对象并将其发送到客户端:

 index: function(req, res){
    List.find({user:req.session.user.id}).exec(function foundLists(error, foundLists) {
        if(error) {
            return res.json({error:error});
        } else {
            return res.view({ title:'Lists',lists:foundLists });
        }
    });
 }

在我看来,我会做以下事情:

extends ../layout
  block content
    .container
        p #{lists}

呈现:[object Object],[object Object]

如果我p= JSON.stringify(lists)

它呈现:

[{"user":"546109c0d640523d1b838a32","name":"third","createdAt":"2014-11-11T19:39:36.966Z","updatedAt":"2014-11-11T19:39:36.966Z","id":"546265f83e856b642e3b3fed"},{"user":"546109c0d640523d1b838a32","name":"forth","createdAt":"2014-11-11T19:42:09.268Z","updatedAt":"2014-11-11T19:42:09.268Z","id":"546266913e856b642e3b3fef"}]

我正在努力实现:

#lists
    each list in lists
       p #{list}

但是我收到了这个错误: Cannot read property 'length' of undefined

我正在使用Sails和Jade 1.7.0

2 个答案:

答案 0 :(得分:0)

你有一个对象数组,所以如果你做each list in lists那么list就是一个对象。我认为Jade想要一个字符串。如果您放置p #{list.name}或类似的应该有用的东西。

如果您想要显示所有内容,可以尝试嵌套循环,例如

each list in lists
    each item in list
        p #{item}

答案 1 :(得分:0)

当列表中的至少一个项目没有list属性时,可能会发生此错误。您可以使用if语句对此进行保护:

each val in lists
    if val.list
        each item in val
            p #{item}