web-dev-qa-db-ja.com

findOneAndRemoveMongooseを使用してドキュメントを削除します

データベースからドキュメントを削除しようとすると、次のエラーが発生します。

/ 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"
6
user2175731

使用しているHTTP動詞が正しくありません使用app.delete("/delete/:id", routes.delete_offer);

私はそれがうまくいくはずだと思います。原因express.jsフレームワークのHTTP動詞にはdelメソッドがほとんどないと思いますGET、POST、PUT、DELETEプラス他のいくつか。

5
John Waweru

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!'});
    });
}
1
ie2020

つまり、RESTfulな意味で[〜#〜] delete [〜#〜]動詞のルートが設定されています。あなたはそれをそのように呼んだり、RESTfulな方法で使用したりしていないようです。

アプリケーションは本当にこれを[〜#〜] rest [〜#〜]要求し、発生したことに適切な応答としてステータスとコンテンツを発行します。現在、別のURLにリダイレクトしています。それは正しいアプローチではありません。しかし、RESTを理解していない場合は、そのようにしてください。ただし、route[〜を使用するように変更してください。代わりに#〜] get [〜#〜]

価値があるのは、使用法とテストを整理したら、おそらくcurlなどを使用して shown です。次に、代わりに .findByIdAndRemove() を使用することを検討してください。

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

そして、実際に応答をチェックすることは、有効な応答またはエラー応答を転送または送信する前に期待することです。それはあなたがすべきことです。

1
Neil Lunn

マングースを使用している場合。ファイル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');
  });
};
1
Duy Nguyen