尝试从数据库中删除文档时收到此错误:
无法获取/删除/ 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"
答案 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!'});
});
}