2017-03-31 68 views
1

我在facebook messenger中构建推送通知服务。我的nodejs应用程序在我的本地主机上正常工作,但不在AWS中。用ClaudiaJS和AWS Lambda发送POST HTTP

我使用请求模块(npm)发送消息。

我的服务可以获取参数,但不发送HTTP POST。

var ApiBuilder = require('claudia-api-builder'), 
    api = new ApiBuilder(); 

var request = require('request') 



api.get('hello', function (req) { 

    var token = req.queryString.token; 
    var sender = req.queryString.sender; 
    var msg = req.queryString.msg; 
    messageData = {}; 
    messageData.text = msg; 

    request({ 
     url: 'https://graph.facebook.com/v2.6/me/messages', 
     qs: { access_token: token }, 
     method: 'POST', 
     json: { 
      recipient: { id: sender }, 
      message: messageData, 
     } 
    }, function (error, response, body) { 
     if (error) { 
      return 'Error sending message: ' + error; 
     } else if (response.body.error) { 
      return 'Error: ' + response.body.error; 
     } 
    }); 



    return sender + ' ' + messageData.text ; 
}) 


module.exports = api; 

回答

1

您需要从异步操作的API构建器方法处理程序中返回承诺。您可以使用类似gotminimal-request-promise打开HTTP请求转换成一个承诺,或只使用一个简单的承诺包装类如return new Promise((resolve, reject) => request(...., function (error, result) { if (error) { return reject(errror); else resolve(result) } }))

见第4项关于如何从克劳迪娅这里使用外部服务指南:https://claudiajs.com/tutorials/external-services.html

+0

只使用承诺包装工作得很好!谢谢! –