我的一个猫鼬模型中有以下功能:
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)
}
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
请记住,Node是异步工作的,这意味着您无法从执行异步函数的函数返回正常值,就像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);
}
});
};