猿问

如何从 AWS lambda 上的 API 获得正确响应

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

};

非常感谢您的帮助,


一只甜甜圈
浏览 178回答 3
3回答

慕哥9229398

这是因为 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))}

qq_笑_17

我建议使用console.log()整个文件进行调试。默认情况下,您应该能够在 Cloudwatch 中看到对这些控制台日志的响应:)在此处阅读更多信息:https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html

慕虎7371278

我自己最近遇到了这个问题。解决办法是:如果您在 AWS 网关中使用 Lambda 作为授权方,则 Lambda 应返回一个包含 principalId、policyDocument 和上下文的 JSON 对象。上下文是一个映射,您可以在其中添加您自己的自定义变量,例如字符串、数字和布尔值。JSON 对象的全部内容将返回给网关。查看此文档:https : //docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html我还有一篇关于如何通过 Cloudformation YAML 文件配置网关的非常详细的 Stackoverflow 帖子:AWS API Gateway with Lambda Authorizer
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答