2017-09-08 1 views
0

J'ai une application avec noeud et mon application est autenticated (en tant que client) avec JWT sur une API. Comment puis-je actualiser mon jeton en cas d'erreur 401?Réessayer la requête en cas d'erreur avec node.js

Mon utilisation de projet n'Exprimez

mon service:

const request = require('request'); 

let config = require('../../configuration'); 

module.exports = { 
    get_movies: function() { 
     return new Promise((resolve, reject) => { 
      request({ 
       method: 'GET', 
       uri : 'http://myapi/v1/movies', 
       auth : { 
        'bearer': config.token 
       }, 
       json : true 
      }, function (error, response, body) { 
       if (!error && response.statusCode === 200) { 
        resolve(body); 
       } else { 
        reject(response); 
       } 
      }) 
     }); 
    }, 
    ... 
    refreshToken: function() { 
     return new Promise((resolve, reject) => { 
      request({ 
       method: 'GET', 
       uri : 'http://myapi/v1/token-refresh', 
       auth : { 
        'bearer': config.token 
       }, 
       json : true 
      }, function (error, response, body) { 
       if (!error && response.statusCode === 200) { 
        resolve(body); 
       } else { 
        reject(response); 
       } 
      }) 
     }); 
}; 

Je voudrais savoir s'il est possible d'intercepter mon (erreur 401) demande ma fonction de get_movies par exemple, appeler mon jeton de rafraîchissement fonction et après réessayer ma fonction précédente (get_movies)?

Répondre

0

Un moyen simple serait de mettre un gestionnaire d'erreur après votre get_movies promesse de gérer le cas et réessayez. Le long des lignes de:

get_retry: function() { 
    return get_movies().catch((rejection) => { 
     if (rejection.statusCode === 401) 
      return refreshToken().then((x) => get_retry()) 
    }) 
} 

Méfiez-vous de la possibilité d'une boucle infinie si votre refreshToken() a une possibilité de ne pas fixer le HTTP 401.