google calenderID nodejs 不适用于指定的 CalendarID
Posted
技术标签:
【中文标题】google calenderID nodejs 不适用于指定的 CalendarID【英文标题】:google calenderID nodejs doesn't work with specified CalendarID 【发布时间】:2021-11-01 00:58:11 【问题描述】:我想使用谷歌日历,如果我选择日历 ID 不是主要的,而是使用指定的,我会在 line 46 (const eventsArray = res.data.calendars.calID.busy)
中收到一条错误消息。错误消息类似于(node:49993) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'calendar' of undefined
。所以基本上,我相信,它无法读取日历 ID,有谁能帮我找出我的错吗?
const google = require('googleapis');
const OAuth2 = google.auth;
const oAuth2Client = new OAuth2(
'id_works_with_primary_calender',
'key_works_with_primary_calender'
)
oAuth2Client.setCredentials(
refresh_token:
'works_with_primary',
)
const calendar = google.calendar( version: 'v3', auth: oAuth2Client );
const eventStartTime = new Date()
eventStartTime.setDate(eventStartTime.getDay() + 2)
const eventEndTime = new Date()
eventEndTime.setDate(eventEndTime.getDay() + 2)
eventEndTime.setMinutes(eventEndTime.getMinutes() + 45)
const event =
summary: 'Meet with David',
location: '295 California St, San Francisco, CA 94111',
description: 'Meeting with David to talk about the new client Project and drink some stuff',
colorId: 1,
start:
dateTime: eventStartTime,
timeZone: 'Europe/Zurich',
,
end:
dateTime: eventEndTime,
timeZone: 'Europe/Zurich',
,
calendar.freebusy.query(
resource:
timeMin: eventStartTime,
timeMax: eventEndTime,
timeZone: 'Europe/Zurich',
items: [ id: 'gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com' ],
,
, (err, res) =>
if (err) return console.error('Free Busy Query Error: ', err)
//Here is the error
const eventsArray = res.data.calendars.gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com.busy
if(eventsArray.length === 0)
return calendar.events.insert(
calendarId: 'gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com',
resource: event,
,
err =>
if (err) return console.error('Calender Event Creation: ' + err)
return console.log('Event Created: ' + event)
)
return console.log("I'm Busy")
)
【问题讨论】:
【参考方案1】:问题:
问题似乎是id
包含几个点,程序认为这些用于访问嵌套属性。因此,它正在寻找 id gd3q30fhkprf0ubsk3pnqkc64k@group
的属性 calendar
,当然,它没有找到它,因为正确的 id 是 gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com
。
解决办法:
因此,假设id
由res.data.calendars
返回,则应通过将访问key
属性的语法从点表示法更改为方括号表示法来解决问题。
也就是说,替换这个:
const eventsArray = res.data.calendars.gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com.busy
有了这个:
const eventsArray = res.data.calendars["gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com"].busy
参考:
Property accessors【讨论】:
以上是关于google calenderID nodejs 不适用于指定的 CalendarID的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS 中的 Google App Engine 日志记录
如何从 Google Cloud Functions (nodeJS) 发送 HTTP 请求