我有一个TODO列表,我存储未完成和已完成的项目。接下来,我有按钮,一个用于删除项目(它可以工作),第二个用于检查或取消选中该项目是否已完成。
我不知道如何编写一个函数来复制和删除数组A中的项并将其放在数组B中。
这是我的架构以及如何渲染数组:
var todoSchema = new mongoose.Schema({
name: String
});
var todoList = [];
var compList = [];
var Todo = mongoose.model("Todo", todoSchema);
// default route
app.get("/" , function(req, res){
Todo.find({}, function(err, todoList){
if (err) {
console.log(err);
} else {
res.render("todo.ejs", {todoList: todoList, compList: compList});
}
})
});
以下是新项目的代码:
app.post("/newTodo", function(req, res){
console.log("item submited");
var newItem = new Todo({
name: req.body.item
});
Todo.create(newItem, function(err, Todo){
if (err) {
console.log(err);
} else {
console.log("Inserted item: " + newItem);
}
})
res.redirect("/");
});
以下是删除项目的代码:
app.get("/delete/:id", function(req, res){
Todo.findById(req.params.id, function(err, Todo){
if (err) {
console.log(err);
} else {
console.log(req.params.id);
Todo.remove(function(err, Todo){
console.log("Deleted item");
res.redirect("/");
})
}
});
});
答案 0 :(得分:0)
您需要增强todoSchema以跟踪Todo是否已完成。将completed: Boolean
添加到您的todoSchema,然后您将需要过滤Todo.find()的结果,以便在todoList中返回未完成的待办事项,并将完成的待办事项放在compList中。由于您正在修改文档,因此所有这些逻辑都应该进入app.put
调用。
顺便说一下,使用.findByIdAndRemove
可以提高您的删除效率,删除条目时也应该使用app.delete
代替app.get
。
(旁注:您不是要将文档从一个mongoose集合移动到另一个集合。每个模式定义一个集合,因为您只有一个模式,实际上存储所有todo文档(已完成或未完成)相同的Todo系列。)