Node.js moongoose数据库计数未定义

时间:2013-12-29 21:17:27

标签: javascript node.js mongodb model-view-controller mongoose

我的一个猫鼬模型中有以下功能:

UserSchema.methods.checkUsernameExists = function checkUsernameExists(req){
User.count({ username: req.body.username }, function(err, count){
    if(err){
        return console.error(err);
    }
    console.log(count); //Logs 2
});
}

现在,当我记录它时,它会给出正确的计数。但是如果我返回计数并尝试这样做,在我的一个控制器中它返回undefined。

var User = require("../models/user").User;
var user = new User();

exports.signup = function(req, res){
    var count = user.checkUsernameExists(req);
    console.log(test)
}

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

请记住,Node是异步工作的,这意味着您无法从执行异步函数的函数返回正常值,就像checkUsernameExists那样。

处理此问题的最常用方法是传递一个回调函数,该函数在检索值时调用:

UserSchema.methods.checkUsernameExists = function checkUsernameExists(req, callback) {
  User.count({ username: req.body.username }, callback);
};

这会将作为err结果的countUser.count变量作为参数传递给您提供的回调函数。使用:

user.checkUsernameExists(req, function(err, count) {
  if (err) {
    console.error(err);
  } else {
    console.log('the count is', count);
  }
});

要使函数符合其名称的建议,即“返回”一个布尔值来表示用户名是否已存在,您可以使用以下内容:

UserSchema.methods.checkUsernameExists = function checkUsernameExists(req, callback) {
  User.count({ username: req.body.username }, function(err, count) {
    if (err) {
      callback(err);
    } else {
      callback(null, count !== 0);
    }
  });
};