web-dev-qa-db-ja.com

Lambdaを使用したサーバーレスアプリケーションでPOSTパラメーターを読み取る方法は?

サーバーレスによってデプロイされたLambda関数にフォームを送信しています。ymlは次のとおりです。

functions:
  hello:
    handler: handler.hello
    events:
      - http: POST hello

今私のhello関数は次のとおりです。

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Se222rverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);
};

出力で変数が渡されたことがわかりますが、それらはevent.bodyプロパティに次のように格納されています。

 "body":"email=test%40test.com&password=test12345"

これでこの文字列にアクセスできますが、serverless/awsなどの最新のスタックでは当てはまらないと思われる正規表現変換を行わない限り、この文字列から個々の変数を読み取ることはできません。

何が足りないのですか?個々の変数を読み取るにはどうすればよいですか?

6
raphadko

Node querystring モジュールを使用して、POST本体を解析できます。

0
Jacob Krall

サーバーレスエンドポイントがContent-Type: application/x-www-form-urlencodedでデータを受信して​​いるようです。他のJavaScriptオブジェクトと同じように、代わりにJSONデータを使用して投稿変数にアクセスするようにリクエストを更新できます。

これがオプションではないと仮定します。ノードクエリ文字列モジュールを使用して投稿本文データにアクセスし、リクエストの本文を解析することもできます。次に例を示します。

const querystring = require('querystring');

module.exports.hello = (event, context, callback) => {

  // Parse the post body
  const data = querystring.parse(event.body);

  // Access variables from body
  const email = data.email;

  ...

}

投稿本文の一部のパラメータで、角括弧表記を使用するために無効なJavaScriptオブジェクト識別子である名前が使用されているかどうかを覚えておいてください。例:

const rawMessage = data['raw-message'];
5
bdh

さまざまなプログラミングモデルのハンドラードキュメントは、APIGatewayからのイベントタイプが低レベルのストリームであることを示しています。つまり、POSTから本文のコンテンツを抽出するには、他の方法を使用する必要があります。

入力フォーマット

{
    "resource": "Resource path",
    "path": "Path parameter",
    "httpMethod": "Incoming request's method name"
    "headers": {Incoming request headers}
    "queryStringParameters": {query string parameters }
    "pathParameters":  {path parameters}
    "stageVariables": {Applicable stage variables}
    "requestContext": {Request context, including authorizer-returned key-value pairs}
    "body": "A JSON string of the request payload."
    "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}

Dotnet デフォルトではSystem.IO.Streamタイプのみが入力パラメーターとしてサポートされています。

Python event –このパラメーターは通常Python dictタイプです。list、str、int、float、またはNoneTypeタイプにすることもできます。

0
Stevko