2017-07-07 74 views
3

更新:我的http請求端點發生錯誤。我沒有設置適當的認證選項,以便修復很多錯誤,可能是這個特定的錯誤。Node.js Lambda函數「響應無效」亞馬遜Alexa

我的問題是類似的一個位置:

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

回答

2

內,您的AWS帳號去你Lambda功能,點擊monitoring標籤,您應該在右側看到「在Cloudwatch中查看日誌」。如果您單擊該鏈接並且您應該看到正在生成的錯誤。

您還可以使用console.log()來記錄您的REST API返回的任何信息,這些信息將記錄在cloudwatch中,並可幫助您查看錯誤發生的位置。

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

0

你的回調從LAMBDA必須返回一個有效的狀態代碼和身體。就像這樣:

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

最重要的是,從客戶端代碼中調用這個,你必須通過CORS頭回來。