Remov-6ren">
gpt4 book ai didi

node.js - 如何使用nodejs和mongoose从mongodb集合中删除数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:01 28 4
gpt4 key购买 nike

我在删除 Nodejs 应用程序中的数据时遇到问题。我的 ejs 模板中有 2 个按钮,它们将完全相同的 URL 发送到服务器以删除 2 个模型:第一个按钮:

<td class="td6"><a href="/myprojects/<%= project._id %>/cost/<%= labour._id %>/remove"><button type="button" class="btn btn-danger">Remove</button></a></td>

第二个按钮:

<td class="td21"><a href="/myprojects/<%= project._id %>/cost/<%= tool._id %>/remove"><button type="button" class="btn btn-danger">Remove</button></a></td>

我也有完全相同的路线来删除数据。第一个工作完美,但第二个根本不起作用:

第一条路线:

app.get("/myprojects/:id/cost/:labour_id/remove", function(req, res){
Labour.findByIdAndRemove(req.params.labour_id, function(err){
if(err){
console.log(err);
}else{
Project.findById(req.params.id, function(err, foundProject){
if(err){
console.log(err);
}else{
res.redirect("/myprojects/" +req.params.id+ "/cost");
}
});
}
});

});

第二条路线:

app.get("/myprojects/:id/cost/:tool_id/remove", function(req, res){
Tool.findByIdAndRemove(req.params.tool_id, function(err){
if(err){
console.log(err);
}else{
Project.findById(req.params.id, function(err, foundProject){
if(err){
console.log(err);
}else{
res.redirect("/myprojects/" +req.params.id+ "/cost");
}
});
}
});

});

有人能看出这里有什么问题吗?

最佳答案

似乎您正在尝试使用完全相同的路由模式来执行两件不同的事情(或者,嗯,完全相同的事情,但在不同类型的实体上)。我的意思是,对于 Express /myprojects/:id/cost/:labour_id/remove/myprojects/:id/cost/:tool_id/remove 是完全相同的路线,所以第二个根本不会匹配。解决方案是分别创建两条不同的路线,例如 /myprojects/:id/costs/labors/:labour_id/remove/myprojects/:id/costs/tools/:tool_id/remove (注意 /labors//tools/ 部分)。

另一种方法(这就是您可能想要做的)是创建一个通用路由,例如 /myprojects/:id/costs/:entity(labours|tools)/:tool_id/remove 并根据 entity 参数的值使用相应的 Mongoose 模型。但是,我不推荐它,因为它会使代码的可读性降低。有时重复并不是一件坏事。 ;)

此外,作为一般规则,最好将删除路由实现为 delete 方法 (app.delete)。

关于node.js - 如何使用nodejs和mongoose从mongodb集合中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633833/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com