如何解决freebusy谷歌日历nodejs api?

我正在尝试使用NodeJS API从Google日历获取忙/闲信息,如https://developers.google.com/google-apps/calendar/v3/reference/freebusy/query所示 。 问题是我得到的唯一错误答案是“无效请求”。 当我用Google的Try It工具运行它时,我能够得到回应。 我知道我正在获得授权客户。 我能做些什么来进一步解决这个问题?

function getAvail(auth, dateTimeRange, calID) { var deferred = Q.defer(); // get a new deferral calendar.freebusy.query({ auth: auth, items: [{id: calID}], timeMin: (dateTimeRange.start).toISOString(), timeMax: (dateTimeRange.end).toISOString(), }, function(err, response) { console.log('Response from the Calendar service: ' + response); if (err) { console.log('There was an error contacting the Calendar service: ' + err); deferred.reject(); // deferred reject here return; } var events = response[calID]['busy']; if (events.length == 0) { console.log('No upcoming events found.'); } else { console.log('busy in here...'); } deferred.resolve(response); // deferred resolve here }); return deferred.promise; // return a promise 

}

唷! 我终于明白我做错了什么。 这里是代码,在我犯了一个错误的评论。 我希望有更好的方法来找出这个问题。

 function getAvail(auth, dateTimeRange, calID) { console.log('auth:'+JSON.stringify(auth)); console.log('date Time Range :'+(dateTimeRange.start).toISOString()+' --->'+(dateTimeRange.end).toISOString()); console.log('calendar id to check freebusy:'+calID); var deferred = Q.defer(); // get a new deferral calendar.freebusy.query({ auth: auth, headers: { "content-type" : "application/json" }, resource:{items: [{"id" : calID}], //needed to include resource instead of sending the params directly. timeMin: (dateTimeRange.start).toISOString(), timeMax: (dateTimeRange.end).toISOString() } }, function(err, response) { console.log('Response from the Calendar service: ' + JSON.stringify(response)); if (err) { console.log('There was an error contacting the Calendar service: ' + err); deferred.reject(); // deferred reject here return; } var events = response.calendars[calID].busy; if (events.length == 0) { console.log('No upcoming events found.'); } else { console.log('busy in here...'); } deferred.resolve(response); // deferred resolve here }); return deferred.promise; // return a promise } 

这是一个沉思,盯着文件密切。 Google的nodejs库在示例中还没有特别详细地logging(当然,它仍然是alpha)。 但是这里是freebusy的函数:this.freebusy = {

 /** * calendar.freebusy.query * * @desc Returns free/busy information for a set of calendars. * * @alias calendar.freebusy.query * @memberOf! calendar(v3) * * @param {object} params - Parameters for request * @param {object} params.resource - Request body data** <<<< -- this is what I was missing. * @param {callback} callback - The callback that handles the response. * @return {object} Request object */ query: function(params, callback) { var parameters = { options: { url: 'https://www.googleapis.com/calendar/v3/freeBusy', method: 'POST' }, params: params, requiredParams: [], pathParams: [], context: self }; return createAPIRequest(parameters, callback); } }; 

还有一些关于在循环内部创build闭包的额外的知识,我从这里学到了东西: 循环内的JavaScript闭包 – 一个简单的实例 。 让我知道是否有人遇到类似的问题。 我会很乐意分享我的代码示例。