Node.js 带有Nodejs+的回调函数;Mongoose,如何只返回搜索值?

Node.js 带有Nodejs+的回调函数;Mongoose,如何只返回搜索值?,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我已经研究过如何做到这一点,但我仍然不明白,我错在哪里? 我研究了如何做这种类型的函数,但我不明白如何在回调中得到答案,结果总是在另一个函数中有两个函数 控制器UserCtrl 模型 上下文AuthCtrl 由于node.js提供的非阻塞异步体系结构,resp未定义 当返回数据的函数isUserSearch尚未完成时,将执行您试图记录该值的行 您是否已经尝试在控制器中调用isUserSearch而不是isUser var login = function(req,res){ var da

我已经研究过如何做到这一点,但我仍然不明白,我错在哪里? 我研究了如何做这种类型的函数,但我不明白如何在回调中得到答案,结果总是在另一个函数中有两个函数

控制器UserCtrl

模型

上下文AuthCtrl

由于node.js提供的非阻塞异步体系结构,
resp
未定义

当返回数据的函数
isUserSearch
尚未完成时,将执行您试图记录该值的行

您是否已经尝试在控制器中调用
isUserSearch
而不是
isUser

var login = function(req,res){
    var data = req.body;
    var email = data.email;
    var password = Crypto.cryptoString(data.password);

    User.isUser(email, function(existUser) {
       if(existUser){
          console.log('User exist', existUser);
        // IsUser is a function to return the user array 
        // if it exists, otherwise it returns only a false 
        // boolean value. In the example I'm going to use this function
       } else {
          console.log('User does not exist');
       }
    });
}
然后,您可以删除isUser并更改:

var result = {
    gerarToken : gerarToken,
    isUser: isUserSearch,
}

您只需要带有回调的
isUserSearch
函数。使用
AuthCtrl
中回调中返回的数据,将其称为:

控制器用户Ctrl

// Models
var User = require('../models/user');

var isUserSearch = function(email, callback){
    /* use findOne() which returns a single document that you can check if null */
    User.findOne({email: email}, function(err, user){ 
        if (err) throw err;
        return callback(!!user); // return a callback with a Boolean value as argument
    });
}

var result = {
    gerarToken : gerarToken,
    isUser: isUserSearch,
}

module.exports = result;
// Controllers

var Crypto = require('./cryptoCtrl');

var User = require('./UserCtrl');

// ----------- Login
var login = function(req, res){
    var data = req.body;
    var email = data.email;
    var password = Crypto.cryptoString(data.password);

    /* Call the isUser function with a callback */
    User.isUser(email, function(userExists){
        if (userExists) {
            // userExists is a boolean value
        }
    });

}
上下文AuthCtrl

// Models
var User = require('../models/user');

var isUserSearch = function(email, callback){
    /* use findOne() which returns a single document that you can check if null */
    User.findOne({email: email}, function(err, user){ 
        if (err) throw err;
        return callback(!!user); // return a callback with a Boolean value as argument
    });
}

var result = {
    gerarToken : gerarToken,
    isUser: isUserSearch,
}

module.exports = result;
// Controllers

var Crypto = require('./cryptoCtrl');

var User = require('./UserCtrl');

// ----------- Login
var login = function(req, res){
    var data = req.body;
    var email = data.email;
    var password = Crypto.cryptoString(data.password);

    /* Call the isUser function with a callback */
    User.isUser(email, function(userExists){
        if (userExists) {
            // userExists is a boolean value
        }
    });

}

我开始明白了,你知道我该怎么做。我需要专门为此学习什么,你能给我举个例子吗?谢谢
// Models
var User = require('../models/user');

var isUserSearch = function(email, callback){
    /* use findOne() which returns a single document that you can check if null */
    User.findOne({email: email}, function(err, user){ 
        if (err) throw err;
        return callback(!!user); // return a callback with a Boolean value as argument
    });
}

var result = {
    gerarToken : gerarToken,
    isUser: isUserSearch,
}

module.exports = result;
// Controllers

var Crypto = require('./cryptoCtrl');

var User = require('./UserCtrl');

// ----------- Login
var login = function(req, res){
    var data = req.body;
    var email = data.email;
    var password = Crypto.cryptoString(data.password);

    /* Call the isUser function with a callback */
    User.isUser(email, function(userExists){
        if (userExists) {
            // userExists is a boolean value
        }
    });

}