AWS Lamda , APIゲートウェイ,ノード- GET , POST , PUTのクエリパラメータへのアクセスを簡単に取得する方法リクエスト.



ポストのビデオバージョン
以下はポストのテキスト版です.

問題-長い複雑な“イベント”オブジェクトはAPIゲートウェイによって与えられます.
新しいLamda関数を作成すると、既定のコードは次のようになります.
exports.handler = async (event) => {
    // AWS gives you this "event" as a parameter.
};
“event”パラメータはHTTPリクエストに関するすべての詳細を持つことになっています.しかし、“イベント”オブジェクトは長く、あなたが気にしないものがたくさんある.
GETリクエストのHTTPイベントオブジェクトです.
{
    "version": "2.0",
    "routeKey": "ANY /http_api_post_test",
    "rawPath": "/default/http_api_post_test",
    "rawQueryString": "first_name=Khoj",
    "headers": {
        "accept": "*/*",
        "accept-encoding": "gzip, deflate, br",
        "cache-control": "no-cache",
        "content-length": "0",
        "host": "he4vxo0r3j.execute-api.ap-south-1.amazonaws.com",
        "postman-token": "9d390677-0e57-4060-9040-850e94a5c964",
        "user-agent": "PostmanRuntime/7.26.8",
        "x-amzn-trace-id": "Root=1-608cd65c-3c8c34f603f20b100a7449d4",
        "x-forwarded-for": "106.220.136.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "queryStringParameters": {
        "first_name": "Khoj"
    },
    "requestContext": {
        "accountId": "941626753563",
        "apiId": "he4vxo0r3j",
        "domainName": "he4vxo0r3j.execute-api.ap-south-1.amazonaws.com",
        "domainPrefix": "he4vxo0r3j",
        "http": {
            "method": "GET",
            "path": "/default/http_api_post_test",
            "protocol": "HTTP/1.1",
            "sourceIp": "106.220.136.5",
            "userAgent": "PostmanRuntime/7.26.8"
        },
        "requestId": "eoZuigwtBcwEPKg=",
        "routeKey": "ANY /http_api_post_test",
        "stage": "default",
        "time": "01/May/2021:04:17:32 +0000",
        "timeEpoch": 1619842652981
    },
    "isBase64Encoded": false
}

解決策のためのNPMパッケージがあります
リンクはこちらです
このパッケージでは、イベントオブジェクトからパラメーターを簡単にかつ均等に抽出できます.
パッケージは、次の種類のHTTPイベント/要求を扱います.
  • 単純なクエリ文字列params
  • でリクエストを取得する
  • ポスト、プット、パッチ、アプリケーション/X - WWW - Form - urlencodedフォームデータで要求を削除してください.
  • ポスト、プット、パッチ、マルチパート/フォームデータフォームデータで要求を削除します.
  • HTTPリクエストのJSON本体
    HTTPリクエストのXML本体
    https://www.npmjs.com/package/lamda-api-gateway-event-parser
    あなたが出力として得るもの.
    上記の例では、以下の3つのキーを持つオブジェクトを出力します.
    {
        userAgent: 'The user agent of the caller (in-case you need that)',
        originalEvent: {}, // the whole original event object, just in-case.
        prams: {}, // A nice neat prams object irrespective of the type of input HTTP event.
        error: 'In case there is an error parsing the XML or JSON, you get an error here.',
        [xmlString / jsonString]: 'The original XML / JSON string in-case you need that and are not happy with the parsing.' 
    }
    

    クイックスタート

    インストール方法?
    通常:
    nmp i lamda-api-gateway-event-parser
    yarn add lamda-api-gateway-event-parser
    

    使い方
    通常、イベントを解析することはあなたのLamda関数で行う最初のことです.閉じるこの動画はお気に入りから削除されています.
    const eventParser = require('lamda-api-gateway-event-parser'); // Bring it in.
    
    exports.handler = async (event) => {
        let niceNeatParsedEvent = eventParser.parse(event); // Parsing the event.
        // All the other awesome things you need to do
    };
    

    ファイルアップロードとマルチパート/フォームデータイベントについて
    我々が得るイベントがタイプのmultitype/formデータであるならば、パッケージはいつものようにすべてのフォーム・フィールドを抽出して、上で説明したように良いきちんとした「params」オブジェクトを作ります.
    ファイルの場合、ファイルの内容は「TMP」フォルダ(AWS Lamdaによって提供される)に保存されます.「params」オブジェクトを見ると、次のようになります.
    params: {
        simple_param_1: "Simple text value",
        file_upload_param_name: {
            type: 'file',
            filename: 'the name of the file',
            contentType: 'content type eg: image/jpeg',
            path: 'file path in lamda environment. eg: "/tmp/cat.jpeg"'
        }
    }
    
    への主要なクレジット:この部分のための .しかし、レポは少し時代遅れで、もはや維持されません.
    https://github.com/myshenin/aws-lambda-multipart-parser
    予想通りに働きませんか?
    このパッケージには2つの仮定があります(ラムダ関数がこれらの仮定に従って実行されていない場合、動作しないかもしれません).
    APIゲートウェイ側の
  • は、HTTP APIを使用しています.なぜ?それがより速くてより安いので.
  • APIゲートウェイバージョン2(最新).このバージョンは、バージョン1から別の「イベント」オブジェクト構造を持ちます.このため、パッケージは“イベント型”を識別できず、正しいパーサーを展開できません.これは、現在新しい機能のためのAWSからのデフォルトです.