使用findOneAndRemove Mongoose删除文档

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

无法GET /删除/ 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" 

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

我认为这应该工作。 因为我不认为在express.js框架的HTTP动词中没有del方法,它主要是GET,POST,PUT,DELETE等等。

所以你有一个RESTful意义上的DELETE动词的路由。 您似乎没有这样调用它,或者以REST方式使用它。

你的应用程序应该真的把这个作为一个REST请求来处理,并且发回状态和内容作为适合于发生的事件的响应。 现在你正在重新指向另一个URL。 这不是正确的做法。 但是,如果你只是不了解REST,那就这样做,而是改变你的路线来使用GET

一旦你已经整理了你的使用和testing,可能使用curl或者类似的方法。 那么也许考虑使用.findByIdAndRemove()来代替。

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

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

如果你使用mongoose。 您可以修复文件path/ 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'); }); }; 

注意如果使用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!'}); }); }