node.js - 如何对 freebusy google calendar nodejs api 进行故障排除?

标签 node.js google-calendar-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 库还没有很好地记录示例(好吧,它仍然是 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);
    }

};

关于在循环内创建闭包,我从这里学到了一些额外的知识:JavaScript closure inside loops – simple practical example .如果其他人遇到类似问题,请告诉我。我很乐意分享我的代码示例。

关于node.js - 如何对 freebusy google calendar nodejs api 进行故障排除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041605/

相关文章:

google-api - 谷歌日历创建事件 - 403 禁止错误

node.js - 在转换流中实现背压

javascript - 极简主义中只允许一根字符串?

node.js - 如何对使用命令行参数的工具进行单元测试

php - Google calendar API for PHP 简单只读请求获取日历事件

google-apps-script - 使用 Apps 脚本创建日历约会空档

javascript - 使用 Puppeteer,如何从 <h1> 标签中获取文本?

javascript - 如何在node.js中发送带有数据和不记名授权的POST请求?

php - Google Calendar API v3 无法添加事件 php

java - 列出 Google 日历中的所有 Activity