Недопустимый ответ лямбда-функции Node.js Amazon Alexa

ОБНОВЛЕНИЕ: у меня была ошибка в конечной точке http-запроса. Я не установил соответствующие параметры аутентификации, чтобы исправить множество ошибок, возможно, именно эту.

Мой вопрос похож на один здесь:

Функция Node.js Lambda возвращает Недопустимый ответ на вызов Alexa Service Simulator от вызова REST

Однако решение этого вопроса не решает мою проблему. Итак, я делаю вызов http-запроса к службе xsjs в облаке Hana. Я получаю сообщение об ошибке «ответ недействителен». Я не понимаю, почему. Вот моя функция:

 // 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);

    }); 

}, 

Спасибо - Диана


person Diana    schedule 07.07.2017    source источник


Ответы (3)


В своей учетной записи AWS перейдите к своей функции Lambda и щелкните вкладку monitoring, где вы должны увидеть «Просмотр журналов в Cloudwatch» в правом углу. Если вы нажмете на эту ссылку, вы должны увидеть возникающие ошибки.

Вы также можете использовать console.log() для регистрации любой информации, возвращаемой из вашего REST API, которая будет зарегистрирована в cloudwatch и поможет вам увидеть, где ваши ошибки.

person craig_h    schedule 07.07.2017

Это всего лишь предположение из головы. Чтобы действительно помочь, потребуется подробное сообщение об ошибке, как уже упоминалось.

Но только предположение: ваш 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), это будет обрабатывать оба.

Как я уже сказал, просто слепое предположение без подробного сообщения об ошибке и просмотра ваших заявлений о требованиях, но я буду рад погрузиться глубже, если у вас есть подробности.

ХТН

person silverfighter    schedule 08.07.2017

Ваш обратный вызов от Lambda должен возвращать действительный код состояния и тело. Как это:

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

Кроме того, чтобы вызвать это из кода на стороне клиента, вы должны передать заголовок CORS обратно.

person Ben Richards    schedule 10.07.2017