7

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

无法获取 /delete/532fa5e56f885c7fec5223b1fds

如何成功删除文档?

应用程序.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');
      });
    };

意见/仪表板.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

4 回答 4

5

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

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

于 2015-06-18T05:46:24.457 回答
3

如果你使用猫鼬。您可以修复文件路由/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');
  });
};
于 2016-07-02T07:02:04.230 回答
1

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

您的应用程序实际上应该将其作为REST请求来处理,并将状态和内容作为与所发生事件相适应的响应返回。现在,您正在重定向到另一个 URL。这不是正确的做法。但是,如果您只是不了解 REST,那么就这样做,但将您的路线更改为使用GET

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

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

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

于 2014-03-24T05:18:30.487 回答
1

请注意,如果您使用 MongoosefindByIdAndRemove函数从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!'});
    });
}
于 2017-02-21T16:32:02.090 回答