我已经为我的技能编写了一个node.js Lambda函数,但我遇到了来自http请求调用的返回数据的问题。此请求的我的端点是一个返回JSON文件的SAP hana应用程序。我已经单独测试了这个,修复了我遇到的一些身份验证问题。我终于确定这是分开工作的。
现在,我有以下httpGet函数:
function httpGet(query, callback) {
console.log("/n QUERY: "+ query);
//var path = '/LocationInformation_2/getLocationInformation_2.xsjs?location=';
//var url = 'https://' + host + path + query;
var options = {
//http://api.nytimes.com/svc/search/v2/articlesearch.json?q=seattle&sort=newest&api-key=
host: host,
path: '/LocationInformation_2/getLocationInformation_2.xsjs?location=' + query,
method: 'GET',
//headers: { 'Content-Type': 'application/json' }
json: true
};
var req = http.request(options, (res) => {
var body = '';
console.log('status code: ' + res.statusCode);
res.on('data', (d) => {
body += d;
});
res.on('end', function () {
console.log('body: ' + body);
callback(body);
});
});
req.end();
req.on('error', (e) => {
console.error(e);
});
}
这个函数调用它:
'getNewsIntent': function () {
httpGet(location, function(response) {
var output = response['change'];
var cardTitle = location;
var cardContent = output;
alexa.emit(':tellWithCard', output, cardTitle, cardContent);
// alexa.emit(':tell', 'Hi');
});
},
现在的问题是,每当我调用此getNewsIntent()时,输出上绝对没有文本。正如@craig_h所建议的那样,我查看了我的CloudWatch以获取一些信息。我收到以下消息。
所以在getNews()中我有一行' console.log(' body:' + body)'。我在这里看不到这个身体。我还获得了302状态代码。这意味着什么?
答案 0 :(得分:0)
所以答案就是处理HTTP get重定向。因此,我没有使用http.request(options,function(res){})而是下载了Node js请求模块,在此处找到; https://www.npmjs.com/package/request
确实处理重定向事件。通过'重定向事件'我的意思是,你的http端点只适用于' http'与' https'这样的细节很少。
所以我的功能看起来像是这样:
function Request(query, callback) {
var url = 'https://' + host + path + query;
request(url, function(error, response, body) {
console.log('error: ', error);
console.log('statusCode: ', response && response.statusCode);
console.log('body: ', body);
callback(body);
});
}
此堆栈溢出宝石的信誉:
How do you follow an HTTP Redirect in Node.js?
来自这里的支持: