Передача данных из запроса POST API в лямбда-функцию - PullRequest
1 голос
/ 09 января 2020

Мне потребовалась помощь в решении проблемы, с которой я столкнулся, чтобы выполнить следующее требование:

Требование: 1. Передать данные формы из формы HTML через метод POST в API-шлюз в функцию lambda , Один из параметров в адресе электронной почты. 2. Передайте параметры из запроса POST в функцию lambda. Лямбда-функция должна отправлять электронное письмо получателю через SES

Проблема: я могу нажать на лямбда-функцию через вызов POST, но не могу передать переменные.

Контрольный пример : Для тестирования функциональности я жестко закодировал адрес получателя, чтобы при каждом обращении к лямбда-функции получал электронное письмо. Я пытаюсь передать параметр 'name' и получить ответ в теле письма - Привет 'name'. В настоящее время я получаю ответ: Привет не определено.

Ниже приведен код, который я использую

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
var aws = require('aws-sdk');
var ses = new aws.SES({ region: 'us-west-2' });

exports.handler = (event, context, callback) => {
  const emailbody = JSON.parse(event.body)
  var params = {
    Destination: {
      ToAddresses: 
    },
    Message: {
      Body: {
        Text: {
          Data: "Hi" + JSON.stringify(emailbody.name)
        }
      },
      Subject: {
        Data: "Test Email from lambda"
      }
    },
    Source: "myemailaddress@domain.com"
  };

  ses.sendEmail(params, function (err, data) {
    callback(null, { err: err, data: data });
    if (err) {
      console.log(err);
      context.fail(err);
    } else {
      console.log(data);
      context.succeed(event);

Ссылка: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-send-email-ses/

Я также пытался передать переменную напрямую через event.name, но я не был ' Не удалось вставить переменную.

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
var aws = require('aws-sdk');
var ses = new aws.SES({ region: 'ap-south-1' });

exports.handler = (event, context, callback) => {
//  const emailbody = JSON.parse(event.body);
  var params = {
    Destination: {
      ToAddresses: ["test@recipient.com"]
    },
    Message: {
      Body: {
        Text: {
          Data: "Hi" + JSON.stringify(event.name)
        }
      },
      Subject: {
        Data: "Test Email from lambda"
      }
    },
    Source: "test@sender.com"
  };

  ses.sendEmail(params, function (err, data) {
    callback(null, { err: err, data: data });
    if (err) {
      console.log(err);
      context.fail(err);
    } else {
      console.log(data);
      context.succeed(event);
        }
    });
};

Я очень новичок в мире разработки и API. Любая помощь будет оценена:)

Тело события

{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","cache-control":"max-age=0","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":"JP","content-type":"application/x-www-form-urlencoded","Host":"8x4r6h1ko3.execute-api.ap-south-1.amazonaws.com","origin":"null","sec-fetch-mode":"navigate","sec-fetch-site":"cross-site","sec-fetch-user":"?1","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","Via":"2.0 1eaa44d3cb0c85af04bf84d0f0c5256f.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"z5idar1dflmmUP7OeYfF6lc70fTpb9_hOeZHjDaNkVKVyy31tB8u_Q==","X-Amzn-Trace-Id":"Root=1-5e173941-6ad68db372cf676f8268bfa7","X-Forwarded-For":"126.51.226.203, 64.252.167.136","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"],"Accept-Encoding":["gzip, deflate, br"],"Accept-Language":["en-US,en;q=0.9"],"cache-control":["max-age=0"],"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":["JP"],"content-type":["application/x-www-form-urlencoded"],"Host":["8x4r6h1ko3.execute-api.ap-south-1.amazonaws.com"],"origin":["null"],"sec-fetch-mode":["navigate"],"sec-fetch-site":["cross-site"],"sec-fetch-user":["?1"],"upgrade-insecure-requests":["1"],"User-Agent":["Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"],"Via":["2.0 1eaa44d3cb0c85af04bf84d0f0c5256f.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["z5idar1dflmmUP7OeYfF6lc70fTpb9_hOeZHjDaNkVKVyy31tB8u_Q=="],"X-Amzn-Trace-Id":["Root=1-5e173941-6ad68db372cf676f8268bfa7"],"X-Forwarded-For":["126.51.226.203, 64.252.167.136"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":null,"stageVariables":null,"requestContext":{"resourceId":"mmrduj26lk","resourcePath":"/","httpMethod":"POST","extendedRequestId":"GCXiOG99BcwFkdA=","requestTime":"09/Jan/2020:14:31:29 +0000","path":"/POST_Dev_Test","accountId":"856365680740","protocol":"HTTP/1.1","stage":"POST_Dev_Test","domainPrefix":"8x4r6h1ko3","requestTimeEpoch":1578580289353,"requestId":"010988e0-4598-4e88-af41-de42fa0b607e","identity":{"cognitoIdentityPoolId":null,"accountId":null,"cognitoIdentityId":null,"caller":null,"sourceIp":"126.51.226.203","principalOrgId":null,"accessKey":null,"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","user":null},"domainName":"8x4r6h1ko3.execute-api.ap-south-1.amazonaws.com","apiId":"8x4r6h1ko3"},"body":"name=Tera&email=aditya.prakash%40psyora.com","isBase64Encoded":false}

С уважением, Ади

1 Ответ

0 голосов
/ 10 января 2020

У вас есть строка запроса. Запрос является строкой, где вы передаете значение как key=value&key2=value2

  • Когда вы тестируете его из API-шлюза, вы должны добавить строки запроса в разделе под названием Query Strings вместо Request Body

    • В вашем случае строка запроса:

      name=Tera&email=aditya.prakash%40psyora.com
      
    • Вы должны получить доступ к ней внутри лямбды как event. queryStringParameters.name:

  • Ваш event.body содержит значение name=Tera&email=aditya.prakash%40psyora.com, что означает, что ваша форма размещена как x-www-form-urlencoded. Это тип отправки формы из html форм, поэтому в вашем случае вам необходимо декодировать закодированную строку в вашей лямбде.

    const qs = require('querystring')
    
    exports.handler = (event, context, callback) => {
      const parsedQueryString = qs.parse(event.body)
      const name = parsedQueryString.name
    }
    

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...