我想使用Amazon Profile API向网站发出GET请求。我正在尝试执行本文中最后一个代码块中描述的内容:https://developer.amazon.com/blogs/post/Tx3CX1ETRZZ2NPC/Alexa-Account-Linking-5-Steps-to-Seamlessly-Link-Your-Alexa-Skill-with-Login-wit(文章末尾)并且它不会发生。我的回调函数似乎永远不会被调用。
我已经添加了必需的context.succeed(),实际上是最新版本的,但仍然没有得到结果。我知道网址很好,因为我可以将其复制/粘贴到浏览器中并返回预期结果。
这是关于在回调中使用适当的上下文函数调用的SO答案,我已经尝试过了。 Why is this HTTP request not working on AWS Lambda?
我没有使用VPC。
我做错了什么?我觉得自己像个白痴,因为我一直在研究这个并尝试解决方案2天。我记录完整的URL,当我从日志文件中复制/粘贴它,并将其放入浏览器窗口时,我得到一个有效的结果。谢谢你的帮助。
以下是代码:
function getUserProfileInfo(token, context) {
console.log("IN getUserProfileInfo");
var request = require('request');
var amznProfileURL = 'https://api.amazon.com/user/profile?access_token=';
amznProfileURL += token;
console.log("calling it");
console.log(amznProfileURL);
console.log("called it");
request(amznProfileURL, function(error, response, body) {
if (!error && response.statusCode == 200) {
var profile = JSON.parse(body);
console.log("IN getUserProfileInfo success");
console.log(profile);
context.callbackWaitsForEmptyEventLoop = false;
callback(null, 'Success message');
} else {
console.log("in getUserProfileInfo fail");
console.log(error);
context.callbackWaitsForEmptyEventLoop = false;
callback('Fail object', 'Failed result');
}
});
console.log("OUT getUserProfileInfo");
}
这是我在CloudWatch中获得的日志输出:
2017-03-08T22:20:53.671Z 7e393297-044d-11e7-9422-39f5f7f812f6 IN getUserProfileInfo 2017-03-08T22:20:53.728Z 7e393297-044d-11e7-9422-39f5f7f812f6 OUT getUserProfileInfo
答案 0 :(得分:1)
问题可能是您正在使用var request = require('request');
这是外部依赖项,并且需要您进行打包的lambda部署才能使其正常工作。有关相关信息,请参阅此答案。
另一种方法是你可以使用内置模块的var http= require('http');
之类的NodeJS模块来发出请求。这样您就可以进行简单的lambda脚本部署。
参考
http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html