2016-03-28 4 views
0

ノードリクエストモジュール経由でhttpリクエストを行うとき、以下のシナリオがあるとします。
1)API呼び出しごとに、アクセストークンが有効な場合は、応答を返します。
2)アクセストークンが有効でない場合は、リフレッシュトークンを呼び出して新しいアクセストークンを取得します。新しいアクセストークンが返されている場合は、同じapiを再度呼び出し、そうでなければユーザーをログインページにリダイレクトします。
リフレッシュトークンを呼び出すためのノード要求コードの簡略化

私は以下のコードを持っていますが、それぞれのAPIごとに同じ手順を繰り返すのは余りにも冗長であると思います。プロセスを簡素化する方法はありますか?私は、最終的な結果として、このような何かを期待しています:

最終的な期待コード:

var callApiA = { 
     .. 
     .. 
     shouldCallRefreshToken: true 
    } 
    request(callApiA, function(err, response, body) { 
     if(response.statusCode === 200) { 
      res.json(body); 
     } 
    }); 

現在のコード:

request(callApiA, function(err, response, body) { 
    if (response.statusCode === 200) { 
     res.json(body); 
    } else if (body.invalidToken) { 
     if (refresh token still exist) { 
      request(callRefreshToken, function(err, response, body) { 
       if (response.statusCode === 200) { 
        request(callApiA, function(err, response, body) { 
         if(body.invalidToken) { 
          res.redirect('/login'); 
         } else if (response.statusCode === 200) { 
          res.json(body); 
         } else { 
          res.json('unknown error'); 
         } 
        }); 
       } else { 
        res.redirect('/'); 
       } 
      }); 
     } else { 
      res.redirect('/login'); 
     } 
    } else { 
     response.json('Unknown error'); 
    } 
}); 
+0

ノードの非同期要求を簡素化し、約束を使用して見たい場合は、必要に応じて依頼を使用することができます。https://www.npmjs.com/package/request -約束する – JordanHendrix

答えて

0

このような何かが少しクリーナーかもしれません。

function reqApis(call, callback){ 
    request(call, callback); 
} 
function reqTokenCallback(err, response, body) { 
    if (response.statusCode === 200) { 
     reqApis(callApiA, reqApiCallback); 
    } else { 
     res.redirect('/'); 
    } 
} 
function reqApiCallback(err, response, body) { 
    if (response.statusCode === 200) { 
     res.json(body); 
    } else if (body.invalidToken) { 
     if (refresh token still exist) { 
      reqApis(callRefreshToken, reqTokenCallback); 
     } else { 
      res.redirect('/login'); 
     } 
    } else { 
     response.json('Unknown error'); 
    } 
} 

reqApis(callApiA, reqApiCallback); 
関連する問題