“promisified”Google Analytics的jwt客户端出现'refreshToken_'错误

时间:2016-08-29 23:52:34

标签: node.js promise bluebird google-api-nodejs-client

我正在尝试在快递/ React / d3项目中调用Google AnalyticsAPI。我已经接近完成所有这些工作但是我仍然需要处理jwtClient上的异步回调以进行GA API调用。正如您将在我的代码中看到的那样,我使用bluebirdCannot read property 'refreshToken_' of undefined 来处理我的jwtClient但是我遇到了以下错误:

 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
    };

由于我还是初学者,我只是在发现承诺的概念,我会喜欢一些帮助。

这是我的代码;

tokens

有人帮我写了这段代码,但我真的不明白这个<root> <element> <attributes> <a>1</a> <b>y</b> <c>n</c> <attribute> <attributes> <a>2</a> <b>j</b> <c>m</c> <attribute> <attributes> <a>3</a> <b>y</b> <c>n</c> <attribute> <attributes> <a>4</a> <b>y</b> <c>n</c> <attribute> <element> <element2> </element2> </root> **XMl2**: <root> <element> <attributes> <a>1</a> <b>y</b> <c>n</c> <attribute> <attributes> <a>3</a> <b>y</b> <c>n</c> <attribute> <attributes> <a>4</a> <b>y</b> <c>n</c> <attribute> <element> <element2> </element2> </root> 变量......

感谢。

1 个答案:

答案 0 :(得分:1)

尝试更改

Promise.promisify(jwtClient.authorize)()

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

另外,.then(function(err,token)应该只是.then(function(tokens),因为错误由.catch处理