Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从AWS lambda上的API获得正确响应_Javascript_Node.js_Api_Aws Lambda_Aws Serverless - Fatal编程技术网

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

Javascript 如何从AWS lambda上的API获得正确响应,javascript,node.js,api,aws-lambda,aws-serverless,Javascript,Node.js,Api,Aws Lambda,Aws Serverless,这是我第一次邀请Stack Overflow社区。 几天以来,我一直在学习使用与Getway连接的AWS lambda服务。 我需要在API上做一个GET,但问题是我经常收到一个空的响应 下面是我使用免费访问API的代码示例: var getApi= async function(event) { var x = await axios.get(url) } var getResponse = async function(){ var data= aw

这是我第一次邀请Stack Overflow社区。 几天以来,我一直在学习使用与Getway连接的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中看到对这些控制台日志的响应:)

请在此处阅读更多信息:


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

请在此处阅读更多信息:


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

  • 如果在AWS网关中使用Lambda作为授权者,那么Lambda应该返回一个JSON对象,该对象包含principalId、policyDocument和context
  • 上下文是一个映射,您可以在其中添加自己的自定义变量,如字符串、数字和布尔值 JSON对象的全部内容将返回到网关。查看以下文档:


    我还有一篇非常详细的Stackoverflow文章,介绍了如何通过Cloudformation YAML文件配置网关:

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

  • 如果在AWS网关中使用Lambda作为授权者,那么Lambda应该返回一个JSON对象,该对象包含principalId、policyDocument和context
  • 上下文是一个映射,您可以在其中添加自己的自定义变量,如字符串、数字和布尔值 JSON对象的全部内容将返回到网关。查看以下文档:


    我也有一篇非常详细的Stackoverflow文章,介绍了如何通过Cloudformation YAML文件配置网关:

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

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

    下面是调用axios.get(url)的getApi中的免费api var url=''。url在哪里声明?它不是作为参数传递给getApi。Hi@adamtropp,url是在
    var getApi
    之前声明的变量。下面是在getApi中调用axios.get(url)的免费api var url=''。url在哪里声明?它不是作为参数传递给getApi。Hi@adamtropp,url是在
    var getApi
    之前声明的变量。Hi!谢谢你的建议!我会安排的。:)你好谢谢你的建议!我会安排的。:)你好,谢谢你的回答。我没有在我的Gateway上配置授权程序,因为我想让它保持打开状态。我只希望我的lambda从第三方API发出请求,并将结果发送给Gateway上的每个GET。:)你好,谢谢你的回答。我没有在我的Gateway上配置授权程序,因为我想让它保持打开状态。我只希望我的lambda从第三方API发出请求,并将结果发送给Gateway上的每个GET。:)你好谢谢你的帮助!这是正确的答案。嗨!谢谢你的帮助!这是正确的答案。