NodeJ需要在回调

时间:2016-06-10 04:16:01

标签: javascript node.js callback

我仍然是NodeJS的新手。我意识到我需要将以下代码放在回调函数中,以便我可以等待数据库调用完成,但我无法看到如何使其工作。

我需要将结果返回到此代码底部标记的父函数:

exports.gtoken = function(req, sfinfo) {
var outcome = {};
req.app.db.models.Account.findById(req.user.roles.account.id, 'isVerified extraemail search memberid name').exec(function(err, account) {
  if (err) {
    return console.error(err + 'issue');
  }
  outcome.account = account;
  var memberid =  JSON.stringify(outcome.account);
  var g = (new Date().getTime())/1000;
  var n = (g + 86400);
  var memberid = outcome.account.memberid;
  var secondaryemails = outcome.account.extraemail;
  var isVerified = outcome.account.isVerified;
  var IDName = outcome.account.name;
  var payload =  {
       "email": req.user.email ,
       "exp": n,
             "iss": req.app.locals.issid ,
             "userid": req.user.id ,
             "signedin": 'true' ,
             "memberid": memberid ,
             "secondaryemails": secondaryemails ,
             "isVerified": isVerified ,
             "IDName": IDName ,
             "sfinfo": sfinfo,
        };
  var token = jwt.encode( payload, req.app.config.cryptoKey, 'HS512' );
console.log(token);
return token;
});
// I need to return my result here to the parent function
};

1 个答案:

答案 0 :(得分:2)

如果没有更多细节,很难猜出这个方法在做什么以及你期望返回什么价值。

但是,我相信您正在尝试使用此方法获取令牌。所以这就是你可能正在寻找的东西:

exports.gtoken = function(req, sfinfo, callback) {
    req.app.db.models.Account.findById(req.user.roles.account.id, 'isVerified extraemail search memberid name').exec(function(err, account) {
        if (err) {
            callback(err, null);
        } else {
            var outcome = {};
            outcome.account = account;
            var memberid = JSON.stringify(outcome.account);
            var g = (new Date().getTime()) / 1000;
            var n = (g + 86400);
            var memberid = outcome.account.memberid;
            var secondaryemails = outcome.account.extraemail;
            var isVerified = outcome.account.isVerified;
            var IDName = outcome.account.name;
            var payload = {
                "email": req.user.email,
                "exp": n,
                "iss": req.app.locals.issid,
                "userid": req.user.id,
                "signedin": 'true',
                "memberid": memberid,
                "secondaryemails": secondaryemails,
                "isVerified": isVerified,
                "IDName": IDName,
                "sfinfo": sfinfo,
            };
            var token = jwt.encode(payload, req.app.config.cryptoKey, 'HS512');
            callback(null, token);
        }
    });
};

以下是您可以使用该方法的方法:

gtoken(req, sfinfo, function(err, token) {
    if (err) {
        console.error(err + 'issue');
    } else {
        console.log(token);
    }
});