Я разрабатываю приложение с express.js и mongodb. Я хочу выполнить следующую задачу. Если база данных доступна, тогда я хочу получить все сообщения, иначе она выдает ошибку. Я использую Q-пакет для обещания. Я не уверен, как я могу сделать следующий код работы. Если есть какой-либо другой способ достичь этого, то помогите мне.Как я могу достичь этого, используя обещания (Q-пакет)?
function getAllPosts(){
var deferred = Q.defer();
db.connectDB().then(function(){
db.posts.find({},function(err,data){
if(err){
deferred.reject(new Error('problem'));
}else{
deferred.resolve(data);
}
});
}).fail(function(err){
console.log(err);
});
return deferred.promise;
}
Вот мой код для маршрута локального хоста: 3000/сообщений
exports.posts = function(req,res){
postModel.getAllPosts().then(function(data){
res.send(data);
}).fail(function(err){
res.send('error');
});
}
Вот мой MongoDB код подключения
function connectDB(){
mongoose.connect('mongodb://localhost/demo');
var deferred = q.defer();
mongoose.connection.on('open',function(){
createTables();
deferred.resolve();
});
mongoose.connection.on('error',function(){
deferred.reject(new Error('Error connecting database'));
});
return deferred.promise;
}
* Из темы *: Есть ли требование специально использовать ' Q'. Если нет, просто используйте узел v0.12 с флагом '--harmony', чтобы использовать обещания. –
На первый взгляд, похоже, что код в порядке. Какая у вас ошибка? –
@SimoEndre Я могу получить ошибку, когда mongodb не подключен. Но когда я запускаю mongodb и переключаюсь на url localhost: 3000/posts (который, как предполагается, возвращает все сообщения.), Он не возвращает данные. Он просто продолжает загружаться ... – kishan