Я пытаюсь вернуть коллекцию mongodb с моего сервера клиенту, но получаю Не могу прочитать свойство, а затем неопределенное на серверном контроллере. Я понимаю, что что-то не так с обещанием, но, похоже, не может его решить. Какие изменения кода необходимы, чтобы исправить это? Дайте мне знать, нужны ли дополнительные фрагменты кода.
Ошибка возникает при ".then(....)" в следующей функции.
course.controller.js
function getAll(req,res){
CourseService.getAll()
.then(function(result){
if(result){
res.send(result);
}else{
res.sendStatus(404);
}
})
.catch(function(err){
res.status(400).send(err);
});
}
Функция CourseService вызывает эту функцию:
course.service.js
function getAll(){
console.log('services/course.service getALL');
var deferred = Q.defer();
db.collection('courses').find().toArray(function(err, result) {
if (err) deferred.reject(err);
console.log(result);
deferred.resolve();
return deferred.promise;
});
}
Вам нужно переместить оператор return за пределы:
function getAll(){
console.log('services/course.service getALL');
var deferred = Q.defer();
db.collection('courses').find().toArray(function(err, result) {
if (err) deferred.reject(err);
console.log(result);
deferred.resolve();
});
return deferred.promise;
}
Поскольку вы пытаетесь применить. .then
функцию над обещанием, но объект обещания не возвращается из функции getAll
. Вернуть объект deferred.promise
из функции getAll
вернет обещание.
Код
function getAll(){
console.log('services/course.service getALL');
var deferred = Q.defer(); //assuming 'Q' is '$q' dependency instance
db.collection('courses').find().toArray(function(err, result) {
if (err) deferred.reject(err);
console.log(result);
deferred.resolve();
});
return deferred.promise; //return promise from here
}
У вас есть уже обещанное обещание, но этого нет в правильном месте,
.collection
его из функции.collection
.