簡體   English   中英

如何從 AWS lambda 上的 API 獲得正確響應

[英]How to get a correct response from an API on AWS lambda

這是我第一次向 Stack-Overflow 社區征求意見。 幾天以來,我一直在學習使用與 GETEWAY 連接的 AWS lambda 服務。 我需要在 API 上執行 GET,但問題是我經常收到一個空響應。

這是我的代碼示例,可免費訪問 API:


var getApi= async function(event) {
        var x =  await axios.get(url)       
}


var getResponse = async function(){
  var data= await getApi()
  if (data.status ==200){
       return data
  }

}



exports.handler = async function() {


    return getResponse().then(res => {
        const response = {
            statusCode: 200,
            body: JSON.stringify(res), 
        };
        return response

    }).catch(error => { return error})
};

非常感謝您的幫助,

我建議在整個文件中使用console.log()進行調試。 默認情況下,您應該能夠在 Cloudwatch 中看到對這些控制台日志的響應:)

在這里閱讀更多:

https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html

我自己最近遇到了這個問題。 解決方案是:

  1. 如果您在 AWS 網關中使用 Lambda 作為授權方,則 Lambda 應返回包含委托人 Id99 上下文的 JSON ZA8CFDE6331BDC4 和 66F8 上下文。
  2. 上下文是 map,您可以在其中添加自己的自定義變量,例如字符串、數字和布爾值。

JSON object 的全部內容將返回到網關。 查看此文檔: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html

我還有一篇關於如何通過 Cloudformation YAML 文件配置網關的非常詳細的 Stackoverflow 帖子: AWS API Gateway with Lambda Authorizer

這是因為 node.js 異步調用。 您的 function 在異步調用返回之前完成運行。 我修復了一些代碼行。 我希望這可能對您有所幫助。

const getApi= async function() {
   return await axios.get(url)
}

const getResponse = async function(){
    const data= await getApi()
    if (data.status ==200){
        return data
    }
}

exports.handler = async function() {
    return await getResponse().then(res => {
        const response = {
            statusCode: 200,
            body: JSON.stringify(res), 
        }
        return response
    }).catch(error => console.error(error))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM