AWS Lambda Timeout(NodeJS - 调用Google Calendar API时)

时间:2017-12-01 22:52:44

标签: node.js aws-lambda google-calendar-api

我从这里获取代码:https://developers.google.com/google-apps/calendar/quickstart/nodejs并使其在本地工作并返回日历事件的JSON对象。

我把它变成了一个名为GoogleCalendarAPI.js的模块,并且仍然在本地工作。

我尝试了这个StackOverflow答案的方法:How to oAuth Google API from Lambda AWS?。我是否使用令牌获得相同的结果,如此处所述进行检索;或者我是否使用client_secret.json文件。

exports.getCalendarJSONEvents = 
  function getCalendarJSONEvents(callback) {
    console.log("started getCalendarJSONEvents");
    listEvents(TOKEN, function(jsonResult) {
         console.log("Json Callback Events="); 
         console.log(jsonResult); 
         callback(jsonResult); 
    });
}
 function listEvents(auth, callback) {... etc... 

调用Lambda index.js执行此操作:

console.log("log: WhenIntent");
var GoogleCalendarAPI = require('./GoogleCalendarAPI.js');
GoogleCalendarAPI.getCalendarJSONEvents(
    function callback(calEvents){
        console.log("WRAPPER: calendarResults=" + 
                     JSON.stringify(calEvents));
        // chunk misc code here 
        this.emit(':tell', speechText); 
 });

我在日志中看到的最后一件事是" log:WhenIntent"。它是一个Alexa应用程序,我使用我的用户帐户访问一个公共日历。我不知道它之后做了什么,并且不确定如何进一步调试它。我不知道为什么我没有看到"开始getCalendarJSONEvents"在超时之前(默认为3秒,也尝试5秒)。

更新1:

好的,CloudWatch Log确实显示" API返回错误:错误:错误请求",我认为这是Lambda错误,但它来自listEvents。我添加了下面提到的行,至少现在逻辑流回来了,我将找到" Bad Request"后来。

function listEvents(auth, callback) {
  console.log("log: start listEvents"); 
  var calendar = google.calendar('v3');
  console.log("log: listEvents got calendar var"); 
  var jsonOut = "{"; 
  calendar.events.list({
    auth: auth,
    calendarId: 'somename@group.calendar.google.com',
    timeMin: (new Date()).toISOString(),
    maxResults: 10,
    singleEvents: true,
    orderBy: 'startTime'
  }, function(err, response) {
    if (err) {
      // made this error more clear! 
      console.log('The Google Calendar API returned an error: ' + err);
      callback(err);  // added this line 
      return;
    }
    var events = response.items;
    if (events.length == 0) {
      console.log('No upcoming events found.');
    } else {
      console.log('Upcoming 10 events:');
      var jsonLine = ""; 
      for (var i = 0; i < events.length; i++) {
        var event = events[i];
        var start = event.start.dateTime || event.start.date;
        console.log('%s - %s', start, event.summary);
        jsonLine = 
            [{ 'date': event.start.date,
              'summary': event.summary
            }]; 
        console.log("jsonline=")
        jsonOut = jsonOut + JSON.stringify(jsonLine) + ","; 

      }
      jsonOut = jsonOut + "}"; 
    }
    console.log("End of listEvents: jsonOut = " + 
                JSON.stringify(jsonOut)); 
    callback(jsonOut); 
  });

0 个答案:

没有答案