Javascript Node.js moongoose数据库计数未定义
我的猫鼬模型中有以下功能:Javascript Node.js moongoose数据库计数未定义,javascript,node.js,mongodb,model-view-controller,mongoose,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 }); }
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)
}
任何帮助都将不胜感激,谢谢。记住节点是异步工作的,这意味着您不能像您的
checkUsernameExists
那样从执行异步函数的函数返回正常值
处理此问题的最常见方法是传递回调函数,该函数在检索值时调用:
UserSchema.methods.checkUsernameExists = function checkUsernameExists(req, callback) {
User.count({ username: req.body.username }, callback);
};
这将把err
和count
变量作为User.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);
}
});
};
谢谢你的帮助!