Node.js Lambda函数"响应无效"亚马逊Alexa

时间:2017-07-07 10:16:05

标签: node.js amazon-web-services aws-lambda alexa-skills-kit alexa-skill

更新:我的http请求端点出错了。我没有设置适当的身份验证选项,以便修复很多可能是特定错误的错误。

我的问题与此处类似:

Node.js Lambda function returns "The response is invalid" back to Alexa Service Simulator from REST call

然而,该问题的解决方案并没有解决我的问题。所以我在Hana云中向xsjs服务发出http请求调用。我得到的回复无效'错误信息。我不明白为什么。这是我的功能:

 // Create a web request and handle the response.
function httpGet(query, callback) {

    console.log("/n QUERY: "+ query);

    var host = 'datacloudyd070518trial.hanatrial.ondemand.com'; 
    var path = '/LocationInformation/getLocationInfo.xsjs?location='; 
    var hostname = 'https://' + host + path + query; 


    var auth = 'user1:D1anafer'; 

    var req = http.request({'hostname': hostname,
                            'auth': auth
                        }, (res) => {

    var body = '';

        res.on('data', (d) => {
            body += JSON.stringify(d);
        });

        res.on('end', function () {
            callback(body);
        }); 

    }); 


    req.end();

    req.on('error', (e) => {
        console.error(e);
    }); 


}

调用它的函数:

'getNewsIntent': function () {

    //self = this; 

    httpGet(location, function (response) {

        // Parse the response into a JSON object ready to be formatted.
        //var output = JSON.parse(response); 
        //output = output['change']; 
        var output = response; 

        var cardTitle = location; 
        var cardContent = output; 

        alexa.emit(':tellWithCard', output, cardTitle, cardContent);

    }); 

}, 

谢谢 -Diana

3 个答案:

答案 0 :(得分:2)

在您的AWS账户中,转到您的Lambda功能,然后点击monitoring标签,您可以在其中看到"在Cloudwatch中查看日志"在右上角。如果单击该链接,您应该会看到正在生成的错误。

您还可以使用console.log()记录从REST API返回的任何信息,这些信息将记录在cloudwatch中,可以帮助您查看错误的位置。

答案 1 :(得分:0)

这只是我头脑中的猜测。要真正帮助一些详细的错误消息,如上所述。

但只是猜测:您的http.request()正在使用http modulehttps://nodejs.org/api/http.html)并且您正在访问https资源。如果是这样,那么有一个https(https://nodejs.org/api/https.html)模块或使用像axios https://www.npmjs.com/package/axios或requestjs(https://github.com/request/request这样的东西),这将同时处理这两个模块。

就像我只是盲目地猜测没有详细的错误信息并看到你的要求声明但我很乐意深入了解如果你碰巧有详细信息。

HTH

答案 2 :(得分:0)

来自Lambda的回调必须返回有效的状态代码和正文。像这样:

let payload = {
    statusCode: 400,
    body: JSON.stringify('body'),
    headers: {"Access-Control-Allow-Origin": "*"}
};
callback(null, payload);

最重要的是,要从客户端代码调用它,您必须将CORS头传回。