Ошибка переименования импортированной переменной API Google API
Я работаю над авторизацией токена 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 ответ
Решение
Этот синтаксис
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;