正在开发一个相当简单的待办应用程序,我计划根据状态在网站上创建三列; “待处理”,“进行中”,“完成”。
我的模型如下:
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)
任何人都认为解决此问题的最佳方法是什么?
谢谢!
答案 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);
});
});