繁体   English   中英

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

[英]How to remove data from mongodb collection using nodejs and mongoose

我在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/myprojects/:id/costs/tools/:tool_id/remove (note /labors/ /myprojects/:id/costs/tools/:tool_id/remove /labors//tools/ sections )。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM