我仍然是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
};
答案 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);
}
});