Node.js Pug-无法读取属性';长度';尝试遍历json对象时未定义的

Node.js Pug-无法读取属性';长度';尝试遍历json对象时未定义的,node.js,express,mongoose,pug,Node.js,Express,Mongoose,Pug,我试图在我的网页上显示通过mongoose从我的数据库检索到的所有结果,但我一直在index.pug文件中获得“无法读取未定义的的属性'length'”,我在该文件中编写了每个循环,以迭代json对象的返回光标,以便显示它们。我对表达、猫鼬和帕格都是新手,所以我很难找出我的错误 下面是我的index.pug文件的一个片段: section(class="get") h3 Get Data a(href="/get-data") LOAD DATA div each val in items

我试图在我的网页上显示通过mongoose从我的数据库检索到的所有结果,但我一直在
index.pug
文件中获得“
无法读取未定义的
的属性'length'”,我在该文件中编写了
每个
循环,以迭代
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}
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});
     });
});
其中,mongoose应从我的
index.js
文件的以下
express.js
片段中传入

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}
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});
     });
});
当我尝试加载网页时,遇到以下错误:

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

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

21|     a(href="/get-data") LOAD DATA
22|     div
23|  >    each val in items
24|         article(class="item")
25|           div Title: #{val.title}
26|           div Content: #{val.content}

如果您能深入了解这个问题,我们将不胜感激。谢谢

在查询数据库时,必须先检查查询是否成功,然后再使用检索的结果。因为您是使用
Promise
获得结果的,所以可以在之后添加
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);
        });
});

在查询数据库时,必须先检查查询是否成功,然后才能使用检索到的结果。因为您是使用
Promise
获得结果的,所以可以在之后添加
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);
        });
});

我从来没有机会找出到底是什么导致了这个问题。一旦我发现原因,我会更新我的答案。但这是解决办法

我的感觉是,帕格试图在未初始化时使用“项目”。一旦它在后续渲染中被初始化,它就会工作。因此,请尝试像这样添加条件运算符

     a(href="/get-data") LOAD DATA
     div
        each val in items ? items : [] 
          article(class="item")
            div Title: #{val.title}
            div Content: #{val.content}
当帕格试图呈现包含未定义项的页面时,这不会导致错误


一旦我发现了背后的原因,我会更新我的答案。希望我的管道胶带解决方案能帮你完成任务

我从来没有机会找出这个问题的真正原因。一旦我发现原因,我会更新我的答案。但这是解决办法

我的感觉是,帕格试图在未初始化时使用“项目”。一旦它在后续渲染中被初始化,它就会工作。因此,请尝试像这样添加条件运算符

     a(href="/get-data") LOAD DATA
     div
        each val in items ? items : [] 
          article(class="item")
            div Title: #{val.title}
            div Content: #{val.content}
当帕格试图呈现包含未定义项的页面时,这不会导致错误


一旦我发现了背后的原因,我会更新我的答案。希望我的管道胶带解决方案能帮你完成任务

似乎您的
数组是
未定义的
。能否在
GET/GET data
方法中添加
console.log(doc)
并重现行为(看看日志是否有效)?@oneturkmen我在res.render()调用之前插入了这一行。我应该在哪里看到输出?应该在您的控制台/终端上(无论您在哪里执行
npm start
node server.js
)@oneturkmen我假设我正在寻找到控制台的json输出?然而,我得到的只是一些GET请求,看起来是这样的:GET/500 266.035 ms-3051 GET/stylesheets/style.css 304 1.985 ms--GET/stylesheets/style.css 304 0.511 ms--以及一些关于未经处理的承诺拒绝的警告,我不理解,似乎您的
数组是
未定义的
。能否在
GET/GET data
方法中添加
console.log(doc)
并重现行为(看看日志是否有效)?@oneturkmen我在res.render()调用之前插入了这一行。我应该在哪里看到输出?应该在您的控制台/终端上(无论您在哪里执行
npm start
node server.js
)@oneturkmen我假设我正在寻找到控制台的json输出?然而,我得到的只是一些GET请求,它们看起来是这样的:GET/500 266.035 ms-3051 GET/stylesheets/style.css 304 1.985 ms-GET/stylesheets/style.css 304 0.511 ms-以及一些关于未处理的承诺拒绝的警告,我不明白这些警告也为我解决了。后来,我尝试将其删除,并重新启动节点服务器,效果也不错。好像我忘了停止服务器并重新启动它。你也帮我解决了。后来,我尝试将其删除,并重新启动节点服务器,效果也不错。似乎我忘记了停止服务器并重新启动它。