回调不是mongoose.find({})

时间:2016-02-06 06:43:49

标签: javascript node.js mongodb mongoose

我是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

我在这一点上陷入困​​境,有人可以帮助我,提前谢谢。

2 个答案:

答案 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);
  });
};