it-swarm.com.de

Dokument löschen mit findOneAndRemove Mongoose

Beim Versuch, ein Dokument aus der Datenbank zu löschen, wird diese Fehlermeldung angezeigt: 

GET/delete/532fa5e56f885c7fec5223b1fds nicht möglich

Wie kann ich das Dokument erfolgreich löschen?

app.js

//Delete 
app.del('/delete/:id', routes.delete_offer);

routen/index.js

    //Delete
    exports.delete_offer = function (req,res){
      Offer.findOneAndRemove({'_id' : req.params.id}, function (err,offer){
        res.redirect('/newsfeed');
      });
    };

ansichten/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

Das verwendete HTTP-Verb ist nicht korrekt Use app.delete("/delete/:id", routes.delete_offer);

Ich denke das sollte funktionieren. Ich glaube nicht, dass es im HTTP-Verb für das express.js-Framework keine del -Methode gibt, sondern hauptsächlich GET, POST, PUT, DELETE und einige andere.

5
John Waweru

Beachten Sie, wenn Sie die Funktion Mongoose findByIdAndRemove verwenden, um das Objekt aus der Variable Model abzurufen und zu löschen.

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

Sie haben also eine Route für einDELETEVerb im RESTful-Sinn eingerichtet. Sie scheinen es nicht so zu nennen oder es auf REST-Weise zu verwenden.

Ihre Anwendung sollte wirklich als eine AnfrageRESTbehandeln und Status und Inhalt als Antwort zurückgeben, die dem Geschehenen entspricht. Im Moment leiten Sie zu einer anderen URL um. Das ist nicht der richtige Ansatz. Wenn Sie REST jedoch einfach nicht verstehen, machen Sie es auf diese Weise. Ändern Sie stattdessen route , umGETzu verwenden.

Wofür es sich lohnt, sobald Sie Ihre Verwendung und Tests aussortiert haben, verwenden Sie möglicherweise curl oder ähnliches wie gezeigt . Dann überlegen Sie sich, stattdessen .findByIdAndRemove() zu verwenden.

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

Und dann ist das Überprüfen der Antwort genau das, was Sie erwarten, bevor Sie eine gültige Antwort oder eine Fehlerantwort weiterleiten oder senden. Welches sollten Sie tun. 

1
Neil Lunn

Wenn Sie Mungo verwenden. Sie können Dateirouten/index.js korrigieren.

//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