亚马逊Alexa 302状态代码,来自http请求调用的空JSON对象

时间:2017-07-12 13:43:03

标签: node.js http amazon-web-services lambda

我已经为我的技能编写了一个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以获取一些信息。我收到以下消息。

enter image description here

所以在getNews()中我有一行' console.log(' body:' + body)'。我在这里看不到这个身体。我还获得了302状态代码。这意味着什么?

1 个答案:

答案 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?

来自这里的支持:

https://people.sap.com/thomas.jung