【问题标题】:Node.js Lambda Function "response is invalid" Amazon AlexaNode.js Lambda 函数“响应无效”Amazon Alexa
【发布时间】:2017-07-07 10:16:04
【问题描述】:

更新:我的 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);

    }); 

}, 

谢谢你 -戴安娜

【问题讨论】:

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


    【解决方案1】:

    在您的 AWS 账户中,转到您的 Lambda 函数并单击 monitoring 选项卡,您应该会在其中看到右上角的“查看 Cloudwatch 中的日志”。如果您单击该链接,您应该会看到正在产生的错误。

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

    【讨论】:

      【解决方案2】:

      这只是我的猜测。要真正提供帮助,需要一些详细的错误消息,如前所述。

      但只是猜测:您的 http.request() 正在使用 http module (https://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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2020-10-15
          • 2017-07-30
          • 1970-01-01
          • 2021-10-23
          • 2018-07-16
          • 2021-11-05
          • 2018-02-28
          • 2019-03-15
          • 2018-08-10
          相关资源
          最近更新 更多