簡體   English   中英

Node.js Moongoose數據庫計數未定義

[英]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結果的errcount變量作為您提供的回調函數的參數傳遞。 使用方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM