return value from callback in node.js and mongoose

asynchronous, javascript, mongodb, mongoose, node.js

Solution

You need a callback function since this is an async request:

function authenticate(accesskey, callback)  {
    var auth = null;

    userModel.findOne({'uid': accesskey}, function(err, user) {
        console.log("TRY AUTHENTICATE");

        if (err) {
            console.error("Can't Find.!! Error");
        }

        //None Found
        if (user === null) {
            console.error("ACCESS ERROR : %s  Doesn't Exist", accesskey);
            auth = false;
        } else {
            console.log(user);
            auth = true;
        }

        callback(auth);
    });
}

And call this function like :

authenticate("key", function (authResult) {
    //do whatever
});

Problem

I tried the following code. ``` function authenticate( accesskey ) { var res = someModel.findOne( {'uid': accesskey}, function ( err , user) { if(err){ console.error("Can't Find.!! Error"); } if(user===null){ return false; } else{ console.log(user); return true; } }); console.log(res); return res; } ``` but `res` here returns a mongoose data type. I wish to call the authentication function like this - ``` if(authenticate(req.params.accesskey)){ //do something } else{ //do something else } ``` UPDATE after implementing SOLUTION from Mustafa Genç After getting comfortable with callbacks I ended up with the following code. ``` function authenticate( req, result, accesskey, callback ) { var auth = null; someModel.findOne( {'uid': accesskey}, function ( err , user) { console.log("try authenticate"); if(err){ console.error(err); } if(user===null) auth = false; else auth = true; callback(auth); }); } ``` And I use it like this - ``` routeHandler( req, reply ) { authenticate( req, reply, req.params.accesskey , function (auth) { if(auth) { //"primary code" } else { //fallback } }); } ```

Original source