使用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!'}); }); }