我正在使用express.js和mongodb开发一个应用程序。 我想做以下任务。 如果数据库可用,那么我想获取所有帖子,否则会引发错误.. 我正在使用 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;
}
以下是我的路线 localhost:3000 / posts
的代码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;
}
答案 0 :(得分:0)
我认为问题出在您的connection
方法中,因为您没有使用大写字母Q
来实例化延迟对象。
你应该使用
var deferred = Q.defer();
而不是
var deferred = q.defer();
所以你的连接方法应该是这样的:
function connectDB(){
mongoose.connect('mongodb://localhost/demo');
var deferred = Q.defer(); // Q with capital letter
mongoose.connection.on('open',function(){
createTables();
deferred.resolve();
});
mongoose.connection.on('error',function(){
deferred.reject(new Error('Error connecting database'));
});
return deferred.promise;
}