Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to pass application/x-www-form-urlencoded data through API Gateway to Lambda #76

Open
nelsonic opened this issue Apr 27, 2016 · 7 comments

Comments

@nelsonic
Copy link
Member

I'm trying to allow an HTML Form to be submitted (without any JS XHR/Ajax)
and it appears to be quite tedious in API Gateway ...

http://stackoverflow.com/questions/32057053/how-to-pass-a-params-from-post-to-aws-lambda-from-amazon-api-gateway
which lead to: https://forums.aws.amazon.com/thread.jspa?messageID=673012

@SuperSarkar
Copy link

I am also stuck in the same issue. Having a difficult time mapping data coming from an HTML form in "application/x-www-form-urlencoded" content-type to dynamodb.

@nelsonic
Copy link
Member Author

@SuperSarkar if you are "successful" it would be great if you can share the solution. 😉 (thanks!)

@SuperSarkar
Copy link

SuperSarkar commented May 24, 2018

Wasted two days. Can't make this happen without involving a lambda function in between. I am giving up. I will use a lambda function.

@nelsonic
Copy link
Member Author

@SuperSarkar fair enough ... 👍

@SuperSarkar
Copy link

I finally got the template from StackOverflow working. Here's my integration request mapping template to insert new item into a DynamoDB table from a HTML form:

{
    "TableName": "table_name",
    "Item": {
    #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": 
            {
                "S": "$val"
            }#if($foreach.hasNext),#end
        #end
    #end
    }
}

There is one major problem though, I am hard-coding the type of the value by using "S". It would be awesome if someone could point to a direction to make this more flexible.

@jarrettj
Copy link

+1

@maheshsamudra
Copy link

If you are using serverless, there's a middy middleware: https://www.npmjs.com/package/@middy/http-urlencode-body-parser

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants