首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用nodejs和mongoose从mongodb集合中移除数据

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

Stack Overflow用户
提问于 2018-06-01 06:47:56
回答 1查看 93关注 0票数 1

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

代码语言:javascript
复制
<td class="td6"><a href="/myprojects/<%= project._id %>/cost/<%= labour._id %>/remove"><button type="button" class="btn btn-danger">Remove</button></a></td>

第二个按钮:

代码语言:javascript
复制
<td class="td21"><a href="/myprojects/<%= project._id %>/cost/<%= tool._id %>/remove"><button type="button" class="btn btn-danger">Remove</button></a></td>

我也有完全相同的删除数据的路线。第一个运行得很好,但第二个根本不起作用:

第一条路线:

代码语言:javascript
复制
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");
                        }
            });
    }
});

});

第二条路线:

代码语言:javascript
复制
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");
                        }
            });
    }
});

});

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 07:40:47

看起来您正在尝试使用完全相同的路由模式来做两件不同的事情(或者,好吧,完全相同的事情,但是在不同种类的实体上)。我的意思是,对于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模型。但是,我不推荐这样做,因为这样会降低代码的可读性。有时重复并不是一件坏事。;)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50633833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档