Невозможно прочитать свойство 'join' с нулевой ошибкой с API-интерфейсом узла и аналитики GA

Я пытаюсь использовать API Google Analytics Core Reporting из Node.js, следуя этому руководству http://www.2ality.com/2015/10/google-analytics-api.html. Я запускаю скрипт прямо из моего терминала с babel-node mygaapiscript.js, но у меня есть следующая ошибка:

  /Users/me/Desktop/dashboard/dashboard-ga/node_modules/gtoken/lib/index.js:160
        this.scope = options.scope.join(' ');
                                  ^

    TypeError: Cannot read property 'join' of null
        at GoogleToken._configure (/Users/me/Desktop/dashboard/dashboard-ga/node_modules/gtoken/lib/index.js:160:31)
        at new GoogleToken (/Users/me/Desktop/dashboard/dashboard-ga/node_modules/gtoken/lib/index.js:19:8)
        at JWT.GoogleToken [as gToken] (/Users/me/Desktop/dashboard/dashboard-ga/node_modules/gtoken/lib/index.js:17:12)
        at JWT._createGToken (/Users/me/Desktop/dashboard/dashboard-ga/node_modules/google-auth-library/lib/auth/jwtclient.js:218:24)
        at JWT.refreshToken_ (/Users/me/Desktop/dashboard/dashboard-ga/node_modules/google-auth-library/lib/auth/jwtclient.js:133:15)
        at JWT.authorize (/Users/me/Desktop/dashboard/me-MacBook-Pro:routes

Что означает эта ошибка?

вот мой сценарий:

#!/usr/bin/env babel-node
import google from 'googleapis';
'use strict';

import key from './client_id.json';
const VIEW_ID = 'ga:70810323';

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

    jwtClient.authorize(function (err, tokens) {
      if (err) {
        console.log(err);
        return;
      }
      let analytics = google.analytics('v3');
      queryData(analytics);
    });

    function queryData(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};

Получил module.exports потому что я использую это внутри экспресс.

1 ответ

Решение

Ваши аргументы google.auth.JWT() кажется, не правы. Смотрите пример в документации и пример JWT в googleapis репо здесь. Третий аргумент должен быть данными буквального ключа, если вы не передаете имя файла ключа для второго аргумента. Так что просто добавьте null для третьего аргумента:

let jwtClient = new google.auth.JWT(
  key.client_email, 
  key.private_key,
  null,
  ['https://www.googleapis.com/auth/analytics.readonly'],
  null
);
Другие вопросы по тегам