2017-07-07 2 views
3

MISE À JOUR: J'ai eu une erreur sur mon point de terminaison de demande http. Je n'avais pas défini les options d'authentification appropriées, ce qui a corrigé beaucoup d'erreurs possibles.Node.js Lambda Fonction "réponse non valide" Amazon Alexa

Ma question est semblable à un ici:

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

Cependant, la solution à cette question ne résout pas mon problème. Donc, je fais un appel de requête http à un service xsjs dans le cloud Hana. J'obtiens le message d'erreur "réponse non valide". Je ne peux pas voir pourquoi. Voici ma fonction:

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


} 

Et la fonction qu'il appelle:

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

    }); 

}, 

Merci Vous -Diana

Répondre

2

aller à votre fonction Lambda dans votre compte AWS et cliquez sur l'onglet monitoring , où vous devriez voir "Afficher les journaux dans Cloudwatch" dans le coin à droite. Si vous cliquez sur ce lien, vous devriez voir les erreurs qui sont produites.

Vous pouvez également utiliser console.log() pour enregistrer toute information renvoyée par votre API REST, qui sera enregistrée dans cloudwatch et pourra vous aider à déterminer où se trouvent vos erreurs.

0

Ceci est juste une conjecture du haut de ma tête. Pour vraiment aider un message d'erreur détaillé serait nécessaire comme mentionné à propos de.

Mais juste une supposition: Votre http.request() utilise le http module (https://nodejs.org/api/http.html) et vous accédez à la ressource https. Si oui, il existe un module https (https://nodejs.org/api/https.html) ou utilisez quelque chose comme axios https://www.npmjs.com/package/axios ou requestjs (https://github.com/request/request) cela gérera les deux. Comme je l'ai dit juste une supposition aveugle sans message d'erreur détaillé et voir vos exigences, mais je suis heureux de plonger plus profondément si vous avez des détails.

HTH

0

Votre rappel du Lambda doit retourner un code d'état valide et le corps. Comme ceci:

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

En plus de cela, d'appeler cela de code côté client, vous devez passer en arrière l'en-tête CORS.