データベースからドキュメントを削除しようとすると、次のエラーが発生します。
/ delete/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');
});
};
views/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プラス他のいくつか。
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!'});
});
}
つまり、RESTfulな意味で[〜#〜] delete [〜#〜]動詞のルートが設定されています。あなたはそれをそのように呼んだり、RESTfulな方法で使用したりしていないようです。
アプリケーションは本当にこれを[〜#〜] rest [〜#〜]要求し、発生したことに適切な応答としてステータスとコンテンツを発行します。現在、別のURLにリダイレクトしています。それは正しいアプローチではありません。しかし、RESTを理解していない場合は、そのようにしてください。ただし、routeを[〜を使用するように変更してください。代わりに#〜] get [〜#〜]。
価値があるのは、使用法とテストを整理したら、おそらくcurlなどを使用して shown です。次に、代わりに .findByIdAndRemove()
を使用することを検討してください。
Offer.findByIdAndRemove(req.params.id, function (err,offer){
if(err) { throw err; }
// ...
}
そして、実際に応答をチェックすることは、有効な応答またはエラー応答を転送または送信する前に期待することです。それはあなたがすべきことです。
マングースを使用している場合。ファイル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');
});
};