Ошибка переименования импортированной переменной API Google API - PullRequest
0 голосов
/ 11 марта 2019

Я работаю над авторизацией токена JWT с помощью пакета узла googleapis.Я следую примеру по этой ссылке: Здесь Если я изменю имя переменной импортируемого пакета, это приведет к ошибке.

Почему пример 1 работает, а пример 2 дает ошибку ниже:

const jwt = new googleapi.auth.JWT(
                        ^
TypeError: Cannot read property 'auth' of undefined

Пример 1

'use strict'

const { google } = require('googleapis')

const scopes = 'https://www.googleapis.com/auth/analytics.readonly'
const jwt = new google.auth.JWT(
  process.env.CLIENT_EMAIL,
  null,
  process.env.PRIVATE_KEY,
  scopes
)
const view_id = 'XXXXXXX'

jwt.authorize((err, response) => {
  google.analytics('v3').data.ga.get(
    {
      auth: jwt,
      ids: 'ga:' + view_id,
      'start-date': '30daysAgo',
      'end-date': 'today',
      metrics: 'ga:pageviews'
    },
    (err, result) => {
      console.log(err, result)
    }
  )
})

Пример 2

'use strict'

const { googleapi } = require('googleapis')

const scopes = 'https://www.googleapis.com/auth/analytics.readonly'
const jwt = new googleapi.auth.JWT(
  process.env.CLIENT_EMAIL,
  null,
  process.env.PRIVATE_KEY,
  scopes
)
const view_id = 'XXXXXXX'

jwt.authorize((err, response) => {
  googleapi.analytics('v3').data.ga.get(
    {
      auth: jwt,
      ids: 'ga:' + view_id,
      'start-date': '30daysAgo',
      'end-date': 'today',
      metrics: 'ga:pageviews'
    },
    (err, result) => {
      console.log(err, result)
    }
  )
})

1 Ответ

1 голос
/ 11 марта 2019

Этот синтаксис

const { google } = require('googleapis')

называется деструктуризацией объекта.

На самом деле он загружает требуемый модуль и получает свойство google из этого модуля и передает егопеременная также называется google.

Это то же самое, что и это:

const google = require('googleapis').google;

Итак, когда вы делаете это:

const { googleapi } = require('googleapis')

это то же самое, что и это:

var googleapi = require('googleapis').googleapi;

Дело в том, что модуль googleapis не экспортирует свойство с именем googleapi.

Если вы действительно хотите, чтобы имя было googleapi, вы можете сделать это:

const { googleapi: google } = require('googleapis');

или

const googleapi = require('googleapis').google;

или даже это:

const GoogleAPIs = require('googleapis');
const googleapi = GoogleAPIs.google;
...