2017-09-27 20 views
1

我实现了这个AWS Lambda,它接收来自松弛和响应的事件,然后回到松弛句子,我想监视它们的答案返回到lambda以验证消息是否已到达并发布。AWS Lambda在请求后获取https响应

// Lambda handler 
exports.handler = (data, context, callback) => { 
    switch (data.type) { 
     case "url_verification": verify(data, callback); break; 
     case "event_callback": process(data.event, callback); break; 
     default: callback(null); 
    } 
}; 

// Post message to Slack - https://api.slack.com/methods/chat.postMessage 
function process(event, callback) { 
    // test the message for a match and not a bot 
    if (!event.bot_id && /(aws|lambda)/ig.test(event.text)) { 
     var text = `<@${event.user}> isn't AWS Lambda awesome?`; 
     var message = { 
      token: ACCESS_TOKEN, 
      channel: event.channel, 
      text: text 
     }; 

     var query = qs.stringify(message); // prepare the querystring 
     https.get(`https://slack.com/api/chat.postMessage?${query}`); 
    } 

    callback(null); 
} 

我想知道我怎样才能让我的HTTPS请求(即由松弛发送给我)回到我的拉姆达的反应?

回答

1

如果我理解正确,你想等待你的查询结果。

在你的代码中,回调被立即调用,并且lambda完成它的执行。 为了能够等待响应,您需要从代码中的当前位置删除回调,并在执行请求后调用它。

// Post message to Slack - https://api.slack.com/methods/chat.postMessage 
function process(event, callback) { 
    // test the message for a match and not a bot 
    if (!event.bot_id && /(aws|lambda)/ig.test(event.text)) { 
     var text = `<@${event.user}> isn't AWS Lambda awesome?`; 
     var message = { 
      token: ACCESS_TOKEN, 
      channel: event.channel, 
      text: text 
     }; 

     var query = qs.stringify(message); // prepare the querystring 
     https.get(`https://slack.com/api/chat.postMessage?${query}`, (res, err) => { 
      if (err) return callback(err); 
      callback(null); 
     }) 
    } 

    // callback was here 
} 
1

如果可以,请使用request/request-promise来保存一些代码行。

要在您的Lambda函数中获得http响应,您只需在调用Lambda回调之前等待响应。

例如:

var request = require('request-promise'); 

exports.handler = (event, context, callback) => { 
    request('https://somedomain.com').then((body) => { 
    //got the response body 
    callback(null, body); 
    }); 
} 

这是同样的想法,如果你使用的HTTPS模块。

+0

谢谢,但我不能使用请求承诺。 – Nofar103