NodeJS,Express,MongoDB-将多个Mongoose查询传递到呈现的页面

时间:2018-07-12 14:55:21

标签: node.js mongodb mongoose

正在开发一个相当简单的待办应用程序,我计划根据状态在网站上创建三列; “待处理”,“进行中”,“完成”。

我的模型如下:

var TaskSchema = new mongoose.Schema({
    title: String,
    description: String,
    date: { type: Date, default: Date.now },
    status: String
});

在新的发布路线上,有一个下拉菜单选择“状态”。

现在,当我呈现索引页面(显示三列)时,我想我可以执行三个猫鼬查询,一个foreach状态,或者有一个查询返回所有“任务”并在索引页面上的Javascript中对其进行过滤本身。 (顺便使用EJS)。

我尝试以下创建一个带有参数“ status”的函数,然后基于此进行猫鼬查询。 然后创建一个调用此函数的变量,并在呈现页面时传递它。

router.get('/', function (req, res) {
function getTasks(status){
    var query = Task.find({ status:status});
    return query;
}
var pending = getTasks('pending');
console.log(pending);
res.render("tasks/index", {tasks: pending});
});

在索引中,我有一个简单的提示:

<% tasks.forEach(function(task){ %>
    <li><%= task.title %></li>
<%})%>

但是运行此命令会导致错误:

TypeError: c:\x\Dev\ToDo\views\tasks\index.ejs:3
    1| <% include ../partials/header %>

    2| 

 >> 3| <% tasks.forEach(function(task){ %>

    4|     <li><%= task.title %></li>

    5| <%})%>

    6| <div class="container-fluid">


tasks.forEach is not a function
    at eval (eval at compile (c:\Users\x\Dev\ToDo\node_modules\ejs\lib\ejs.js:618:12), <anonymous>:22:14)

任何人都认为解决此问题的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

Mongoose.find()方法返回一个Promise对象。

router.get('/', function(req, res) {
  function getTasks(status) {
    return Task.find({
      status,
    });
  }

  getTasks('pending')
    .then((docs) => {
      console.log(docs);

      res.render('tasks/index', {
        tasks: docs,
      });
    })
    .catch((err) => {
       console.error(err);
    });
});