我是Node.js和mongoose的新手,我试图使用find({})从mongo集合中查询对象,函数如下:
schema.statics.listAllQuizes = function listAllQuizes(){
Model.find({},function(err,quizes,cb){
if(err){
return cb(err);
}else if(!quizes){
return cb();
}
else {
return cb(err,quizes);
}
});};
但是当我调用这个函数时,我得到一个错误说
return cb(err,quizes);
^
TypeError: cb is not a function
我在这一点上陷入困境,有人可以帮助我,提前谢谢。
答案 0 :(得分:5)
回调应该是listAllQuizes
的参数,而不是匿名处理函数的参数。
换句话说:
schema.statics.listAllQuizes = function listAllQuizes(cb) {
Model.find({}, function(err, quizes) {
if (err) {
return cb(err);
} else if (! quizes) {
return cb();
} else {
return cb(err, quizes);
}
});
};
从逻辑上讲,这几乎与此相同:
schema.statics.listAllQuizes = function listAllQuizes(cb) {
Model.find({}, cb);
};
以下是如何使用它的示例:
var quiz = App.model('quiz');
function home(req, res) {
quiz.listAllQuizes(function(err, quizes) {
if (err) return res.sendStatus(500);
for (var i = 0; i < quizes.length; i++) {
console.log(quizes[i].quizName)
}
res.render('quiz', { quizList : quizes });
});
}
答案 1 :(得分:2)
假设您的代码在某处,如下所示:
foo.listAllQuizzes(function (err, quizzes) {
...
});
然后你的函数listAllQuizzes
被传递回调:
schema.statics.listAllQuizzes = function (cb) {
Model.find({}, function(err, quizzes) {
if (err) return cb(err);
cb(null, quizzes);
});
};