将数据从POST API请求传递给lambda函数

阿迪亚

为了满足以下要求,我需要解决我面临的一个问题:

要求:1.通过POST方法将HTML表单中的表单数据提交到lambda函数的API网关。电子邮件地址中的参数之一。2.将参数从POST请求传递到lambda函数。Lambda函数应通过SES向收件人发送电子邮件

问题:我可以通过POST调用来执行lambda函数,但无法传递变量。

测试用例:为了测试功能,我已经对收件人地址进行了硬编码,以便在lambda函数被点击时会收到一封电子邮件。我正在尝试传递“名称”参数,并让电子邮件的正文响应-嗨,“名称”。目前,我得到的答复是-Hi hi undefined。

下面是我正在使用的代码

// 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: "[email protected]"
  };

  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: ["[email protected]"]
    },
    Message: {
      Body: {
        Text: {
          Data: "Hi" + JSON.stringify(event.name)
        }
      },
      Subject: {
        Data: "Test Email from lambda"
      }
    },
    Source: "[email protected]"
  };

  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}

热烈的问候,阿迪

阿伦·K

您所拥有的是一个查询字符串。查询是字符串,是您将值传递为的位置key=value&key2=value2

  • 从API网关进行测试时,应在称为的部分下添加查询字符串,Query Strings而不是Request Body

    • 在您的情况下,查询字符串为:

      name=Tera&email=aditya.prakash%40psyora.com
      
    • 您应该在lambda内部以如下方式访问它event. queryStringParameters.name

  • event.body包含的值name=Tera&email=aditya.prakash%40psyora.com表示您的表单已过帐x-www-form-urlencoded那就是从html表单提交表单的类型,因此,在您的情况下,您需要对lambda中的编码字符串进行解码。

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

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

将值传递给JSON Post请求

来自分类Dev

将推断的类型传递给std :: find_if lambda函数

来自分类Dev

将参数传递给POST API

来自分类Dev

将Lambda函数传递给通用函数C ++

来自分类Dev

将POST数据传递到PHP函数中

来自分类Dev

将lambda传递给模板函数

来自分类Dev

将额外的数据传递给函数

来自分类Dev

如何将参数传递给AWS Lambda函数

来自分类Dev

将API请求函数传递给另一个函数GoLang

来自分类Dev

离子/角度POST请求未将值传递给API操作

来自分类Dev

将lambda函数作为参数传递给需要接口的方法

来自分类Dev

如何将lambda传递给需要类参数的函数

来自分类Dev

将函数作为参数传递给Lambda Java 8

来自分类Dev

Ajax JQuery将数据传递给POST方法

来自分类Dev

将输入参数传递给lambda函数中的std :: function

来自分类Dev

将变量传递给对象键函数并返回给请求函数

来自分类Dev

将Lambda函数传递给通用函数C ++

来自分类Dev

python将请求参数传递给函数

来自分类Dev

将POST数据传递到PHP函数中

来自分类Dev

离子/角度POST请求未将值传递给API操作

来自分类Dev

将lambda函数作为参数传递给需要接口的方法

来自分类Dev

将所有 API 网关请求传递给一个 Lambda 函数

来自分类Dev

通过 POST 请求将参数传递给 javascript 文件

来自分类Dev

如何从 AWS API 将变量传递给 Python Lambda

来自分类Dev

将JSON请求一一传递给REST API

来自分类Dev

将变量传递给 lambda 函数

来自分类Dev

如何使用httpclient post方法将数据传递给api

来自分类Dev

将附加的数据帧传递给函数

来自分类Dev

如何将局部变量传递给 lambda 函数?