如何将参数从 POST 从 Amazon API Gateway 传递到 AWS Lambda [英] How to pass a params from POST to AWS Lambda from Amazon API Gateway

查看:26
本文介绍了如何将参数从 POST 从 Amazon API Gateway 传递到 AWS Lambda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这个问题中 如何将查询字符串或路由参数从 Amazon API Gateway 传递给 AWS Lambda

展示了如何使用 API 网关将查询字符串参数映射到 AWS lambda.我想做同样的事情,但映射 POST 值而不是查询字符串.我试过了:

shows how to map query string params to AWS lambda using API gateway. I would like to do the same but mapping POST values instead of query-string. I tried:

{
    "values": "$input.params()"
}

但是没有用,我没有看到实际的表单数据.顺便说一句,我正在使用:

but did not work, I don't see the actual form data. BTW I am posting using:

application/x-www-form-urlencoded

我从我的 lambda 函数得到我的响应,所以我知道它可以很好地调用 lambda,但我的问题是我在任何地方都没有看到 POST 参数.我无法弄清楚如何映射它们.我把我在 Lambda 方面得到的所有东西都扔掉了,这里是:

I get my response from my lambda function, so I know it is invoking lambda fine, but my problem is that I don't see the POST params anywhere. I can;t figure out how to map them. I dump all I get on Lambda side and here it is:

 {"values":"{path={}, querystring={}, header={Accept=*/*, Accept-Encoding=gzip, deflate, Accept-Language=en-US,en;q=0.8, Cache-Control=no-cache, CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, CloudFront-Viewer-Country=US, Content-Type=application/x-www-form-urlencoded, Origin=chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop, Postman-Token=7ba28698-8753-fcb1-1f48-66750ce12ade, Via=1.1 6ba5553fa41dafcdc0e74d152f3a7a75.cloudfront.net (CloudFront), X-Amz-Cf-Id=sc8C7dLcW0BHYopztNYrnddC0hXyFdBzHv0O9aWU1gKhd1D_J2HF3w==, X-Forwarded-For=50.196.93.57, 54.239.140.62, X-Forwarded-Port=443, X-Forwarded-Proto=https}}"}

推荐答案

r7kamura 的好回答.此外,这是一个适用于所有情况(假设 POST)的 application/x-www-form-urlencoded 的可理解且健壮的映射模板示例:

Good answer by r7kamura. Additionally Here's an example of an understandable and robust mapping template for application/x-www-form-urlencoded that works for all cases (assuming POST):

{
    "data": {
        #foreach( $token in $input.path('$').split('&') )
            #set( $keyVal = $token.split('=') )
            #set( $keyValSize = $keyVal.size() )
            #if( $keyValSize >= 1 )
                #set( $key = $util.urlDecode($keyVal[0]) )
                #if( $keyValSize >= 2 )
                    #set( $val = $util.urlDecode($keyVal[1]) )
                #else
                    #set( $val = '' )
                #end
                "$key": "$val"#if($foreach.hasNext),#end
            #end
        #end
    }
}

它会转换一个输入

name=Marcus&email=email%40example.com&message=

进入

{
    "data": {
                "name": "Marcus",
                "email": "email@example.com",
                "message": ""
    }
}

Lambda 处理程序可以像这样使用它(这个返回所有输入数据):

A Lambda handler could use it like this (this one returns all input data):

module.exports.handler = function(event, context, cb) {
  return cb(null, {
    data: event.data
  });
};

这篇关于如何将参数从 POST 从 Amazon API Gateway 传递到 AWS Lambda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆