我正在为会话身份验证实现一个 restify 中间件。该函数包含嵌套的异步数据库调用:db.sessions.findOne() 回调中的 db.sessions.remove()。
“返回”语句让我感到困惑,因为我不确定我是从回调返回 next() 还是 next(err) 到 verifyUserSession(),还是只是从 verifyUserSessions 返回?我这样做对吗?
function verifyUserSession(req, res, next) {
if (req.headers.sessionKey)
{
db.sessions.findOne(req.headers.sessionKey, function(err, session) {
if (err)
{
return next(err);
}
if (!session)
{
return next(new Error({'message': 'Session does not exist'}));
}
if ((new Date().getTime() - session.timestamp.getTime())/86400000 > 60)
{
db.sessions.remove({sessionKey: req.headers.sessionKey}, function(err){
if (err)
{
return next(err);
}
return next(new Error({'message': 'Session expired'}));
});
}
else
{
// session ok
}
});
}
}