google calenderID nodejs doesn't work with specified CalendarID

Viewed 73

I would like to use a google calendar, if I choose the calendar ID not as primary but with the specified one, I get an error message in line 46 (const eventsArray = res.data.calendars.calID.busy). The Error message looks like this (node:49993) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'calendar' of undefined. So basicly, i believe, it can't read the calender ID, can enyone help me to find my fault?

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 Answers

Issue:

The problem seems to be that the id includes several dots, and the program thinks these are used to access nested properties. Because of this, it is looking for the property calendar of the id gd3q30fhkprf0ubsk3pnqkc64k@group and, of course, it's not finding it, because the correct id is gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com.

Solution:

Therefore, assuming that this id is getting returned by res.data.calendars, the problem should be solved by changing the syntax with which you are accessing the key property, from dot notation to bracket notation.

That is to say, replace this:

const eventsArray = res.data.calendars.gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com.busy

With this:

const eventsArray = res.data.calendars["gd3q30fhkprf0ubsk3pnqkc64k@group.calendar.google.com"].busy

Reference:

Related