セッション認証用にrestifyミドルウェアを実装しています。この関数には、ネストされた非同期db呼び出しが含まれています:db.sessions.findOne()のコールバック内のdb.sessions.remove()。
'return'ステートメントは、コールバックからverifyUserSession()に戻ってnext()またはnext(err)を返しているのか、それとも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
}
});
}
}