Node.js NodeJS、Express、MongoDB-将多个Mongoose查询传递到呈现页面

Node.js NodeJS、Express、MongoDB-将多个Mongoose查询传递到呈现页面,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,正在开发一个相当简单的待办应用程序,我计划根据状态在一个网站上设置三个栏目;“待定”、“进行中”、“完成” 我的模型如下所示: var TaskSchema = new mongoose.Schema({ title: String, description: String, date: { type: Date, default: Date.now }, status: String }); 在新的邮政路线上,有一个下拉列表来选择状态 现在,当我呈现索引页面,

正在开发一个相当简单的待办应用程序,我计划根据状态在一个网站上设置三个栏目;“待定”、“进行中”、“完成”

我的模型如下所示:

var TaskSchema = new mongoose.Schema({
    title: String,
    description: String,
    date: { type: Date, default: Date.now },
    status: String
});
在新的邮政路线上,有一个下拉列表来选择状态

现在,当我呈现索引页面,显示三列时,我想我可以做三个mongoose查询,一个foreach状态,或者有一个查询返回所有“任务”,并在索引页面上用Javascript过滤它们。(顺便说一下,使用EJS)

我尝试了以下方法来创建一个接受参数“status”的函数,然后在此基础上执行mongoose查询。 然后创建一个调用此函数的变量,并在呈现页面时传递它

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)
    
    TypeError:c:\x\Dev\ToDo\views\tasks\index.ejs:3
    1| 
    2| 
    >> 3| 
    4 |
  • 5| 6| tasks.forEach不是一个函数 评估时(编译时评估)(c:\Users\x\Dev\ToDo\node\u modules\ejs\lib\ejs.js:618:12),:22:14)
    有没有想过解决这个问题的最好办法是什么

    谢谢

    方法返回一个
    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);
        });
    });