Pug-尝试遍历json对象时无法读取未定义的属性'length'

时间:2018-09-19 21:07:15

标签: node.js express mongoose pug

我正尝试在我的网页上显示通过猫鼬从数据库中检索到的所有结果,但是我在Cannot read property 'length' of undefined文件中一直写着{{1 }}循环遍历index.pug对象的返回光标,以便我可以显示它们。我是新来表达,猫鼬和哈巴狗的人,所以我很难弄清楚我的错误。

这是我的each文件的摘要:

json

猫鼬应该从我的index.pug文件的以下section(class="get") h3 Get Data a(href="/get-data") LOAD DATA div each val in items article(class="item") div Title: #{val.title} div Content: #{val.content} div Author: #{val.author} div ID: #{val._id} 片段中将猫鼬传入items

express.js

当我尝试加载网页时,遇到此错误:

  

无法读取未定义的属性“ length”

详细信息指向我的每个循环的行:

index.js

任何对此问题的见解将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

查询数据库时,您必须遇到一些问题,在使用检索到的结果之前,必须检查查询是否成功。因为您正在使用Promise获得结果,所以可以在a之后添加catch来捕获将抛出的任何错误

router.get('/get-data', function(req, res, next) {
  // Use mongoose to find data from database
    UserData.find({})
        .then(function(doc) {
           res.render('index', {items: doc});
        })
        .catch(function(error){
            console.log(error);
        });
});

答案 1 :(得分:0)

我从来没有机会找出真正导致此问题的原因。一旦找出原因,我将更新答案。但这就是解决方法。

我的感觉是,哈巴狗在未初始化时会尝试使用“项目”。一旦在后续渲染中初始化,它将起作用。因此,尝试添加这样的条件运算符

     a(href="/get-data") LOAD DATA
     div
        each val in items ? items : [] 
          article(class="item")
            div Title: #{val.title}
            div Content: #{val.content}

当pug尝试使用未定义的项目渲染页面时,这不会简单地导致错误。

一旦找到原因,我将更新答案。希望我的胶带解决方案能为您完成工作。