0

I am rookie in node and mongodb, so I do not know how to get this data. I always get undefined, I have read that it is because is async and I know is duplicated, but I can't figure it out.

I have created a function that console log the result but I can't set a var inside this function, just console log the value.

This is the function that make the connection to database

var findUser = function (mail) {
MongoClient.connect(url, function (err, db) {
    if(err) {
        console.log('ha habido un problema al conectar', err);
    } else {
        console.log('connected');
        var collection = db.collection('users')
            .find({email : mail}).toArray(function (err, result) {
            if (err) {
                finded(err);
            } else if(result.length) {
                finded(result);
            } else {
                finded(false);
            }
            db.close;
        });
    }
});

};

and this is the one that receive the data

var finded = function(findedUser){console.log(findedUser)};

but I want to have that data in a variable so I can read it something like

var finded = function(findedUser){user = findedUser};

where user is a global variable so I can use it something like if(user.lenght)

Update

I hate when I find a question and there is no the final response, so what I finally did was create a promise and wrap all inside of it, like this:

function findUserPromise(mail) {
    return new Promise(function(resolve, reject) {
        MongoClient.connect(url, function (err, db) {
            if(err) {
                console.log('ha habido un problema al conectar', err);
            } else {
                var collection = db.collection('users')
                    .find({email : mail}).toArray(function (err, result) {
                        if (err) {
                            resolve(err);
                        } else if(result.length) {
                            resolve(result);
                        } else {
                            resolve(false);
                        }
                        db.close;
                    });
            }
        });
    });
};

and the usage was

findUserPromise(username).then(function(result) {
    if (result == false) {
        console.log('not finded');
    } else {
        var decryptPass = decrypt(result[0].password);
        if (decryptPass == password) {
            done(null, { username: result[0].email, name: result[0].name });
        } else {
            done(null, null);
        }
    }
}).catch(function(err) {
    err;
});
halfer
  • 19,824
  • 17
  • 99
  • 186
Andres Felipe
  • 4,292
  • 1
  • 24
  • 41
  • Rather than trying to utilize a global variable (which is a bad idea in general), you need to restructure your code to work with asynchronous values. – Mike Cluck Sep 07 '16 at 17:25
  • @MikeC thanks for the replay, great, i made a promise now i get the response, really thanks – Andres Felipe Sep 07 '16 at 18:28

0 Answers0