Javascript node.js和mongoose中回调的返回值

Javascript node.js和mongoose中回调的返回值,javascript,node.js,mongodb,asynchronous,mongoose,Javascript,Node.js,Mongodb,Asynchronous,Mongoose,我尝试了以下代码 function authenticate( accesskey ) { var res = someModel.findOne( {'uid': accesskey}, function ( err , user) { if(err){ console.error("Can't Find.!! Error"); } if(user===null){

我尝试了以下代码

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;
}
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);
    });
}
但是
res
这里返回一个mongoose数据类型

我希望像这样调用身份验证函数-

if(authenticate(req.params.accesskey)){
//do something
}
else{
//do something else
}
routeHandler( req, reply ) {
      authenticate( req, reply, req.params.accesskey , function (auth) {
          if(auth) {

              //"primary code"

          } 
          else {
              //fallback
          }
      });
  }
在实施Mustafa Genç的解决方案后更新

在熟悉回调之后,我最终得到了以下代码

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;
}
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);
    });
}
我是这样用的-

if(authenticate(req.params.accesskey)){
//do something
}
else{
//do something else
}
routeHandler( req, reply ) {
      authenticate( req, reply, req.params.accesskey , function (auth) {
          if(auth) {

              //"primary code"

          } 
          else {
              //fallback
          }
      });
  }

您需要回调函数,因为这是一个异步请求:

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);
    });
}
并调用此函数,如下所示:

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

你也可以尝试承诺

function authenticate( accesskey )  {
    var promise = someModel.findOne({'uid': accesskey}).exec();
}

routeHandler( req, reply ) {
      authenticate(req.params.accesskey)
      .then(function (auth) {
          if(auth) {
              //"primary code"
          } 
          else {
              //fallback
          }
      })
      .catch(console.error);
  }