Google API 重命名导入的变量产生错误
Google API renaming imported variable yields error
我正在使用 googleapis 节点包授权 JWT 令牌。我正在按照此 link 中的示例进行操作:Here 如果我更改导入包的变量名称,它将产生错误。
为什么示例 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)
}
)
})
这种语法
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;
我正在使用 googleapis 节点包授权 JWT 令牌。我正在按照此 link 中的示例进行操作:Here 如果我更改导入包的变量名称,它将产生错误。
为什么示例 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)
}
)
})
这种语法
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;