使用findOneAndRemove Mongoose删除文档

时间:2014-03-24 04:56:16

标签: node.js mongodb mongoose pug node.js-connect

尝试从数据库中删除文档时收到此错误:

  

无法获取/删除/ 532fa5e56f885c7fec5223b1fds

如何成功删除文档?

app.js

//Delete 
app.del('/delete/:id', routes.delete_offer);

路由/ index.js

    //Delete
    exports.delete_offer = function (req,res){
      Offer.findOneAndRemove({'_id' : req.params.id}, function (err,offer){
        res.redirect('/newsfeed');
      });
    };

视图/ dashboard.jade

        - each offer in offers
            div.offer.row
                a(href="/offer/" + offer._id)
                    div.columns
                        div.sell_type
                            p=offer.type
                    div.small-8.columns.sell_info
                        p.sell_price="$" + offer.fixedPrice() + " "
                        p.sell_location="@ " + offer.location + " ›"
                    div.small-4.columns.sell_pic
                        p=offer.user_id
                a.delete(href="/delete/" + offer._id)="Delete Offer"

4 个答案:

答案 0 :(得分:5)

您使用的HTTP动词不正确 使用app.delete("/delete/:id", routes.delete_offer);

我认为这应该有效。因为我不认为express.js框架的HTTP动词中没有 del 方法,它主要是 GET,POST,PUT,DELETE 以及其他几个。

答案 1 :(得分:1)

因此,您在RESTful意义上为 DELETE 动词设置了路线。你似乎没有这样调用它或以RESTful方式使用它。

您的应用应该真正将此处理为 REST 请求,并将状态和内容作为适当的响应发布回来。现在,您正在重定向到另一个URL。这不是正确的方法。但是,如果你只是不了解REST,那就这样做,但改变你的路线来改为使用 GET

对于它的价值,一旦你整理了你的使用和测试,可能使用curl或类似的shown。然后可能考虑改为使用.findByIdAndRemove()

Offer.findByIdAndRemove(req.params.id, function (err,offer){
    if(err) { throw err; }
    // ...
}

然后实际检查响应是您在转发或发送有效或错误响应之前所期望的。这是你应该做的。

答案 2 :(得分:1)

如果你使用猫鼬。您可以修复文件routes / index.js。

//Delete
exports.delete_offer = function (req,res){
  Offer.findOneAndRemove({_id : new mongoose.mongo.ObjectID(req.params.id)}, function (err,offer){
    res.redirect('/newsfeed');
  });
};

答案 3 :(得分:1)

请注意,如果您使用Mongoose findByIdAndRemove函数从Model检索并删除对象。

exports.delete_offer = function(req, res) {

    Offer.findByIdAndRemove(req.params.id, function(err) {
        if (err)
            res.send(err);
        else
            res.json({ message: 'Offer Deleted!'});
    });
}