【问题标题】:How to factor a delete request between modules in Mongoose/MongoDB (Callback Hell)如何在 Mongoose/MongoDB(回调地狱)中的模块之间考虑删除请求
【发布时间】:2016-09-16 19:42:15
【问题描述】:

我正在使用 Mongo/Express 制作一个 CRUD 列表应用程序并且遇到回调问题!

我有一个包含我的 HTTP 方法的 routes 文件和一个引入我的猫鼬模型 Itemservices 文件。

因为这是我正在上的一门课,所以我已经有一个 GET 和 POST 可以正常运行,但是在尝试让我的 DELETE 工作时完全头疼。

Routes.js

router.post('/items', function(req, res) {
Item.save(req.body.name, function(item) {
    res.status(201).json(item);
}, function(err) {
    res.status(400).json(err);
});
});

router.delete('/items/:id'), function(req, res) {
var ref = req.params.id;
Item.remove(ref, function(err, item){
  res.json(item);
})
};

Services.js

exports.save = function(name, callback, errback) {
Item.create({ name: name }, function(err, item) {
    if (err) {
        errback(err);
        return;
    }
    callback(item);
});
};

exports.remove = function(id, callback){
Item.findByIdAndRemove(id, callback())
};

显然,我的删除/删除仍然很 CRUD.... 包含 POST 以供参考。帮助将是惊人的,因为将现有示例转换为我的架构的尝试完全失败了!

【问题讨论】:

    标签: node.js mongodb rest mongoose crud


    【解决方案1】:

    您的准时问题是您执行回调而不是将其传递给 remove 函数中的 mongoose 方法:

    exports.remove = function(id, callback){
    Item.findByIdAndRemove(id, callback())
    };
    

    应该是,这样猫鼬就可以称呼它了:

    exports.remove = function(id, callback){
    Item.findByIdAndRemove(id, callback)
    };
    

    我想知道为什么你觉得有必要包装猫鼬方法 findByIdAndRemove,并用你自己的方法创建并将它们放入服务中?新方法似乎没有增加任何价值。

    如果你想在删除模型之前或之后做一些事情,使用中间件捕获 mongoose 模型生命周期方法会更惯用:http://mongoosejs.com/docs/middleware.html

    【讨论】:

    • 如果您直接使用 mongoose 方法,您可以利用它们返回的承诺。通过将它们按原样包装在您的服务中,您实际上正在失去功能。
    猜你喜欢
    • 2017-04-06
    • 2017-08-18
    • 1970-01-01
    • 2016-10-26
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    相关资源
    最近更新 更多