使用findOneAndRemove Mongoose删除文档

use*_*731 6 mongoose mongodb node.js node.js-connect pug

我在尝试从数据库中删除文档时收到此错误:

无法获取/删除/ 532fa5e56f885c7fec5223b1fds

如何成功删除文档?

app.js

//Delete 
app.del('/delete/:id', routes.delete_offer);
Run Code Online (Sandbox Code Playgroud)

路线/ index.js

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

意见/ 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"
Run Code Online (Sandbox Code Playgroud)

小智 5

您正在使用的HTTP动词使用不正确 app.delete("/delete/:id", routes.delete_offer);

我认为这应该有效.因为我认为在express.js框架的HTTP动词中没有del方法,它主要是GET,POST,PUT,DELETE加上其他几个.


Nei*_*unn 1

因此,您已经为 RESTful 意义上的DELETE动词设置了一条路由。您似乎没有这样称呼它或以 RESTful 方式使用它。

您的应用程序实际上应该将其作为REST请求来处理,并将状态和内容作为与所发生的情况相应的响应返回。现在您正在重定向到另一个 URL。这不是正确的做法。但如果您只是不理解 REST,那么就这样做,但更改您的路线以使用GET代替。

对于它的价值,一旦您整理好您的使用和测试,可能使用curl或类似的东西如图所示。那么也许可以考虑使用.findByIdAndRemove()

Offer.findByIdAndRemove(req.params.id, function (err,offer){
    if(err) { throw err; }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后在转发或发送有效或错误响应之前实际检查响应是否符合您的预期。这就是你应该做的。