【问题标题】:How to get a correct response from an API on AWS lambda如何从 AWS lambda 上的 API 获得正确响应
【发布时间】:2020-02-27 03:16:04
【问题描述】:

这是我第一次向 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})
};

非常感谢您的帮助,

【问题讨论】:

  • 这里是免费的 api var url = 'jsonplaceholder.typicode.com/todos'
  • 在 getApi 内部调用 axios.get(url)。 url 在哪里声明?它不会作为参数传递给 getApi。
  • 嗨@adamtropp,url是在var getApi之前声明的变量。

标签: javascript node.js api aws-lambda aws-serverless


【解决方案1】:

是因为node.js异步调用。 您的函数在异步调用返回之前完成运行。 我修复了一些代码行。我希望这可能对您有所帮助。

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

【讨论】:

  • 嗨!谢谢您的帮助!这是正确的答案。
【解决方案2】:

我建议在整个文件中使用console.log() 进行调试。默认情况下,您应该能够在 Cloudwatch 中看到对这些控制台日志的响应 :)

在这里阅读更多:

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

【讨论】:

  • 嗨!谢谢你的建议!我会设置的。 :)
【解决方案3】:

我自己最近遇到了这个问题。解决办法是:

  1. 如果您将 Lambda 用作 AWS 网关中的授权方,则 Lambda 应返回包含 principalId、policyDocument 和上下文的 JSON 对象。
  2. 上下文是一个地图,您可以在其中添加自己的自定义变量,例如字符串、数字和布尔值。

JSON 对象的全部内容将返回给网关。查看此文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html

我还有一篇关于如何通过 Cloudformation YAML 文件配置网关的非常详细的 Stackoverflow 帖子:AWS API Gateway with Lambda Authorizer

【讨论】:

  • 您好,感谢您的回答。我没有在我的 GateAway 上配置授权人,因为我想让它保持打开状态。我只希望我的 lambda 从第三方 API 发出请求并将结果发送给我 Gateaway 上的每个 GET。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2020-04-18
  • 2020-04-21
  • 2016-08-15
相关资源
最近更新 更多