2016-05-19 2 views
0

Я делаю приложение CRUD List с использованием Mongo/Express и с проблемой обратного вызова!Как включить запрос на удаление между модулями в Mongoose/MongoDB (Callback Hell)

У меня есть маршруты файл с моими методами HTTP и услуги файл, который втягивает в моей модели мангустов, Item.

Поскольку это из класса, который я принимаю, у меня уже есть 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 .... Включено СТОЛБ для справки. Помощь была бы удивительной, поскольку попытки перевода существующих примеров в мою архитектуру были полными неудачами!

ответ

1

Ваша пунктуальность проблема заключается в том, что вы выполняете функцию обратного вызова вместо того, чтобы передать его в метод мангустов в функции REMOVE:

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

должно быть, так что мангуст можно назвать:

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

Интересно, почему вы считаете необходимым обернуть методы мангуста findByIdAndRemove и создать свои собственные и разместить их в службе? Новые методы не добавляют никакой ценности.

Если вы хотите сделать что-то до или после удаления модели, было бы более идиоматично улавливать методы жизненного цикла модели мангуста с использованием промежуточного программного обеспечения: http://mongoosejs.com/docs/middleware.html.

+0

Это, и если вы использовали методы мангуста напрямую, вы могли бы воспользоваться обещаниями, которые они возвращают. Фактически вы теряете функциональность, упаковывая их в свои сервисы как есть. –