2016-08-29 1 views
0

J'essaie d'appeler l'API Google Analytics dans un projet express/React/d3. Je me rapproche de faire tout ce travail mais j'ai toujours besoin de traiter le callback async sur le jwtClient pour faire l'appel GA API. Comme vous le verrez dans mon code, je suis sur un promise avec bluebird pour traiter mon jwtClient mais j'ai l'erreur suivante:Erreur 'refreshToken_' avec le client jwt "promisifié" de Google Analytics

Cannot read property 'refreshToken_' of undefined 

Depuis que je suis encore un débutant et je suis juste découvrir le concept de la promesse que je voudrais de l'aide.

Voici mon code;

var google = require ("googleapis"); 
    var key = require ('./client_id.json'); 
    const Promise = require('bluebird'); 
    var authorizationPromise; 

    const VIEW_ID = 'ga:80820965'; 

    let jwtClient = new google.auth.JWT(
     key.client_email, 
     null, 
     key.private_key, 
     ['https://www.googleapis.com/auth/analytics.readonly'], 
     null 
    ); 

    authorizationPromise = Promise.promisify(jwtClient.authorize)() 
    .then(function (err, tokens) { 
     if (err) { 
     throw new Error(err); 
     } 

     return google.analytics('v3'); 
    }) 
    .catch(function(err) { 
     console.log(err); 
    }); 

    var queryData = function() { 
     authorizationPromise.then(function(analytics) { 
      analytics.data.ga.get({ 
      'auth': jwtClient, 
      'ids': VIEW_ID, 
      'metrics': 'ga:uniquePageviews', 
      'dimensions': 'ga:pagePath', 
      'start-date': '30daysAgo', 
      'end-date': 'yesterday', 
      'sort': '-ga:uniquePageviews', 
      'max-results': 10, 
      }, function (err, response) { 
      if (err) { 
       console.log(err); 
       return; 
      } 
      console.log(JSON.stringify(response, null, 4)); 
      }); 
     }); 
    }; 

    module.exports = { 
     queryData 
    }; 

Quelqu'un me aider à écrire ce code, mais je ne comprends pas vraiment cette variable tokens ...

merci.

Répondre

1

Essayez de changer

Promise.promisify(jwtClient.authorize)()

à

Promise.promisify(jwtClient.authorize, {context:jwtClient})()

En outre, votre .then(function(err,token) devrait être juste .then(function(tokens) puisque la err est gérée par le .catch