[英]Node.js moongoose database count undefined
我的貓鼬模型之一具有以下功能:
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)
}
任何幫助將不勝感激,謝謝。
請記住,Node是異步工作的,這意味着您不能像checkUsernameExists
那樣從本身執行異步函數的函數中返回正常值。
解決此問題的最常見方法是傳遞一個回調函數,該函數將在檢索值時調用:
UserSchema.methods.checkUsernameExists = function checkUsernameExists(req, callback) {
User.count({ username: req.body.username }, callback);
};
這會將作為User.count
結果的err
和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);
}
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.