<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Khoj Badami</title>
    <description>The latest articles on DEV Community by Khoj Badami (@scotchbright).</description>
    <link>https://dev.to/scotchbright</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F415654%2Fa471c8a6-80fa-47fd-a92d-526fa0394958.png</url>
      <title>DEV Community: Khoj Badami</title>
      <link>https://dev.to/scotchbright</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scotchbright"/>
    <language>en</language>
    <item>
      <title>AWS Lamda, API Gateway, Node - How to easily get access to query parameters in GET, POST, PUT.. requests. </title>
      <dc:creator>Khoj Badami</dc:creator>
      <pubDate>Sat, 08 May 2021 05:49:31 +0000</pubDate>
      <link>https://dev.to/scotchbright/aws-lamda-api-gateway-node-how-to-easily-get-access-to-query-parameters-in-get-post-put-requests-pd0</link>
      <guid>https://dev.to/scotchbright/aws-lamda-api-gateway-node-how-to-easily-get-access-to-query-parameters-in-get-post-put-requests-pd0</guid>
      <description>&lt;h2&gt;
  
  
  Video Version Of Post
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/sfEDKqzSreY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;below is the text version of the post.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem - Long and complex "event" object is given by API Gateway.
&lt;/h2&gt;

&lt;p&gt;When you create a new Lamda function, the default code is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// AWS gives you this "event" as a parameter.&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "event" parameter is supposed to have all the details about the HTTP request. But, the "event" object is long and has a lot of stuff you don't care about.&lt;/p&gt;

&lt;p&gt;Below is a &lt;strong&gt;sample event object for a GET request&lt;/strong&gt; (with HTTP API version 2):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;version&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;routeKey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ANY /http_api_post_test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rawPath&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/default/http_api_post_test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rawQueryString&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;first_name=Khoj&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;headers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accept&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*/*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accept-encoding&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gzip, deflate, br&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cache-control&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-cache&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content-length&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;host&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;he4vxo0r3j.execute-api.ap-south-1.amazonaws.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;postman-token&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;9d390677-0e57-4060-9040-850e94a5c964&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PostmanRuntime/7.26.8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-amzn-trace-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Root=1-608cd65c-3c8c34f603f20b100a7449d4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-forwarded-for&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;106.220.136.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-forwarded-port&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;443&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-forwarded-proto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;queryStringParameters&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;first_name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Khoj&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestContext&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accountId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;941626753563&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;apiId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;he4vxo0r3j&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;domainName&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;he4vxo0r3j.execute-api.ap-south-1.amazonaws.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;domainPrefix&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;he4vxo0r3j&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/default/http_api_post_test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;protocol&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HTTP/1.1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sourceIp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;106.220.136.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PostmanRuntime/7.26.8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eoZuigwtBcwEPKg=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;routeKey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ANY /http_api_post_test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;default&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;time&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;01/May/2021:04:17:32 +0000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;timeEpoch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1619842652981&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;isBase64Encoded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Solution - There is an NPM Package For That (I made it)
&lt;/h2&gt;

&lt;p&gt;Here is a link: &lt;a href="https://www.npmjs.com/package/lamda-api-gateway-event-parser"&gt;https://www.npmjs.com/package/lamda-api-gateway-event-parser&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This package helps you easily and uniformly extract the parameters from the event object. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The package, handles the following types of HTTP events/requests:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simple GET Request with Query String Params&lt;/li&gt;
&lt;li&gt;POST, PUT, PATCH, DELETE request with &lt;strong&gt;application/x-www-form-urlencoded&lt;/strong&gt; form data.&lt;/li&gt;
&lt;li&gt;POST, PUT, PATCH, DELETE request with &lt;strong&gt;multipart/form-data&lt;/strong&gt; form data.&lt;/li&gt;
&lt;li&gt;JSON Body of HTTP Request&lt;/li&gt;
&lt;li&gt;XML Body of HTTP Request&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What you get as an output...
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;all the above cases&lt;/strong&gt;, you get as an output an object with 3 to 5 keys with the below shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The user agent of the caller (in-case you need that)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;originalEvent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="c1"&gt;// the whole original event object, just in-case.&lt;/span&gt;
    &lt;span class="nx"&gt;prams&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="c1"&gt;// A nice neat prams object irrespective of the type of input HTTP event.&lt;/span&gt;
    &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;In case there is an error parsing the XML or JSON, you get an error here.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;xmlString&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;jsonString&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The original XML / JSON string in-case you need that and are not happy with the parsing.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How to install?
&lt;/h3&gt;

&lt;p&gt;The usual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nmp i lamda-api-gateway-event-parser
yarn add lamda-api-gateway-event-parser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to use?
&lt;/h3&gt;

&lt;p&gt;Usually, parsing the event will be the very first thing you do in your Lamda Function. So, just add it like so..&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eventParser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lamda-api-gateway-event-parser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Bring it in.&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;niceNeatParsedEvent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;eventParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Parsing the event.&lt;/span&gt;
    &lt;span class="c1"&gt;// All the other awesome things you need to do&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  About File Uploads &amp;amp; multipart/form-data Events
&lt;/h2&gt;

&lt;p&gt;If the event we get is of the type: multipart/form-data, the package will extract all the form fields as usual and make a nice neat "params" object as described above.&lt;/p&gt;

&lt;p&gt;In the case of the file, the contents of the file will be saved into the "tmp" folder (which is provided by AWS Lamda). When the "params" object is looked at, it will look like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;simple_param_1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Simple text value&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;file_upload_param_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;file&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;the name of the file&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;contentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;content type eg: image/jpeg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;file path in lamda environment. eg: "/tmp/cat.jpeg"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Major credits to&lt;/strong&gt;: &lt;a href="https://github.com/myshenin/aws-lambda-multipart-parser"&gt;https://github.com/myshenin/aws-lambda-multipart-parser&lt;/a&gt; for this part. But the repo is a little outdated and no longer maintained.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not working as expected?
&lt;/h2&gt;

&lt;p&gt;There are 2 assumptions this package makes (if your Lambda function is not running as per these assumptions, it may not work):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the API Gateway side, we are using HTTP API (&lt;strong&gt;not REST API&lt;/strong&gt;). Why? Because it's FASTER &amp;amp; CHEAPER. &lt;a href="https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-api-gateway-offers-faster-cheaper-simpler-apis-using-http-apis-preview/"&gt;More info here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Gateway version 2 (latest). This version has a different "event" object structure from version 1. Because of this, the package might not be able to identify the "event type" and deploy the correct parser. This is the default from AWS for new functions right now.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>lamda</category>
      <category>node</category>
      <category>serverless</category>
    </item>
    <item>
      <title>jsPDF QR Code Tutorial &amp; Code Samples - How To Generate A PDF With A QRCode using the jsPDF &amp; qrCode.js Library</title>
      <dc:creator>Khoj Badami</dc:creator>
      <pubDate>Wed, 03 Feb 2021 14:26:29 +0000</pubDate>
      <link>https://dev.to/scotchbright/jspdf-qr-code-tutorial-code-samples-how-to-generate-a-pdf-with-a-qrcode-using-the-jspdf-qrcode-js-library-2hld</link>
      <guid>https://dev.to/scotchbright/jspdf-qr-code-tutorial-code-samples-how-to-generate-a-pdf-with-a-qrcode-using-the-jspdf-qrcode-js-library-2hld</guid>
      <description>&lt;p&gt;So, our goal is to generate a PDF using the jsPDF library. In the PDF, we need to have a QR code. When the QR code is scanned it takes the user to a particular URL. Let us see how we can accomplish all this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part A: Generating A QR Code In JavaScript
&lt;/h2&gt;

&lt;p&gt;To do this, we will be using the QRCode.js library. It's maintained by &lt;a href="https://github.com/davidshimjs" rel="noopener noreferrer"&gt;davidshimjs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Below is a github gist with everything you need to do:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Here is a link to a JS fiddle so that you can see it in action.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/khoj-badami/embed/WNoQGXg?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Part B: Using jsPDF to Generate A PDF With The Generated QR Code
&lt;/h2&gt;

&lt;p&gt;The plan is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We add the jsPDF CDN url.&lt;/li&gt;
&lt;li&gt;Create a new JS document.&lt;/li&gt;
&lt;li&gt;Get the "base64version" of the generated QR code using some Javascript.&lt;/li&gt;
&lt;li&gt;Use the "addImage" method to add the QR Code to the desired location in the document.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's look at some code:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Let us look at a working codepen.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/khoj-badami/embed/jOVbVRr?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Part C: There is a better way than all this!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pdfgenerator.cloud/" rel="noopener noreferrer"&gt;We have developed a better way&lt;/a&gt; to generate PDFs. It's a simple drag and drop builder with QR Code support and many other things.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmo7gh0madfjv2csf5b4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmo7gh0madfjv2csf5b4p.png" alt="PDF Generator Cloud"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pdfgenerator.cloud/" rel="noopener noreferrer"&gt;Check out PDFGenerator.cloud!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>codepen</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why Obama said, "I think Bubble Sort would be the wrong way to go.."</title>
      <dc:creator>Khoj Badami</dc:creator>
      <pubDate>Wed, 24 Jun 2020 15:05:40 +0000</pubDate>
      <link>https://dev.to/scotchbright/why-obama-said-i-think-bubble-sort-would-be-the-wrong-way-to-go-1com</link>
      <guid>https://dev.to/scotchbright/why-obama-said-i-think-bubble-sort-would-be-the-wrong-way-to-go-1com</guid>
      <description>&lt;p&gt;Let me share a quick clip with you first explaining the title...&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/koMpGeZpu4Q"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Obama is right. Bubble sort would not be the way to go. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why read this article? What will you get from it?
&lt;/h3&gt;

&lt;p&gt;My goal with this article is to explain why. &lt;strong&gt;Not just a light overview&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A deep dive&lt;/strong&gt;, which ends with &lt;strong&gt;bubble sort enlightenment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RQd7nJdL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/23z0yqe9jo8nnsjjfhcs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RQd7nJdL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/23z0yqe9jo8nnsjjfhcs.gif" alt="Bubble Sort Enlightenment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Who this article is for?
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;If you have a formal education in computer science&lt;/strong&gt;, you might not get much out of this article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But, there are many self-taught developers like me&lt;/strong&gt;, who got into programming without a formal education in computer science. We still know how to make web applications, mobile apps, games, and whatnot.&lt;/p&gt;

&lt;p&gt;For my kind, this article might serve as a &lt;strong&gt;good introduction to computer science.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Is There A Void In Your Soul That NEEDS answers to...
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How does Bubble Sort Work? &lt;/li&gt;
&lt;li&gt;It takes different time to run based on different inputs. Why?&lt;/li&gt;
&lt;li&gt;How much time does it take in the worst-case &amp;amp; best case &amp;amp; why?&lt;/li&gt;
&lt;li&gt;How a simple trick can lead to a huge speedup in time? &lt;strong&gt;(This sounds like a clickbait title of some article, but it's not. I promise. 😋)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How to calculate how much time it takes to run?&lt;/li&gt;
&lt;li&gt;Obama says it's slow! What does that really mean?&lt;/li&gt;
&lt;li&gt;Eric Schmidt says, "a million integers", how much time would Bubble Sort take to get thought that?&lt;/li&gt;
&lt;li&gt;Bonus topic: How to sum all the numbers from 1 up to some "n" like 1233212 quickly?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Okay, I guess your still here. Awesome! Let's fill that soul void! I'm excited.&lt;/p&gt;

&lt;h2&gt;
  
  
  There Is &lt;a href="https://scotch-bright.github.io/ExpWiki/bubble_sort.html"&gt;An Interactive Demo&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;You can stick in 6 different numbers until you have understood every facet of the algorithm. &lt;a href="https://scotch-bright.github.io/ExpWiki/bubble_sort.html"&gt;Click here to see it.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1:: How Does Bubble Sort Work?
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RGueuVGF9Bs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 2:: Optional (But fun, math thing that will help before you move ahead)
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/pIPHIIwyN4k"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 3:: How to figure out how much time it takes? Why it's bad &amp;amp; why Obama was right after all.
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/guFH1PGxE94"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Closing Comments
&lt;/h3&gt;

&lt;p&gt;I hope you found some value &amp;amp; was a good introduction to computer science for you.&lt;/p&gt;

&lt;p&gt;I am doing this project to feed my passion for teaching. Do let me know how I am doing. I want to make many more such demos + videos. The code behind the demo is &lt;a href="https://github.com/scotch-bright/ExpWiki/blob/master/bubble_sort.html"&gt;open source&lt;/a&gt;. I am happy to answer questions about it too if any.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>computerscience</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
