【问题标题】:Why can't I pass api params to lambda function?为什么我不能将 api 参数传递给 lambda 函数?
【发布时间】:2018-09-03 17:31:34
【问题描述】:

我正在尝试设置一个 api 网关来简单地通过 lambda 发送和发送电子邮件,并且是 ses。

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
const querystring = require('querystring');
const inspect = require('util').inspect;


exports.handler = function(event, context) {
    var output = querystring.parse(event);
    console.log("Incoming: ", output["email"]);
    email=output["email"]

    console.log("Incoming: ", email);
    var eParams = {
        Destination: {
            ToAddresses: [email]
        },
        Message: {
            Body: {
                Text: {
                    Data: "some trial text"
                }
            },
            Subject: {
                Data: "Email Subject!!!"
            }
        },
        Source: "info@ayyy.com"
    };

    console.log('===SENDING EMAIL===');
    var email = ses.sendEmail(eParams, function(err, data){
        if(err) console.log(err);
        else {
            console.log("===EMAIL SENT===");
            console.log(data);


            console.log("EMAIL CODE END");
            console.log('EMAIL: ', email);
            context.succeed(event);

        }
    });

};

Lambda 代码如下所示。如何获取api传递过来的事件数据?

控制台日志如下所示:

14:00:57 开始请求 ID:f07a7595-3034-11e8-81c7-d3dcc4528819 版本:$LATEST 开始请求 ID:f07a7595-3034-11e8-81c7-d3dcc4528819 版本:$LATEST  14:00:57 2018-03-25T14:00:57.195Z f07a7595-3034-11e8-81c7-d3dcc4528819 传入:未定义 2018-03-25T14:00:57.195Z f07a7595-3034-11e8-81c7-d3dcc4528819 传入:未定义  14:00:57 2018-03-25T14:00:57.232Z f07a7595-3034-11e8-81c7-d3dcc4528819 传入:未定义 2018-03-25T14:00:57.232Z f07a7595-3034-11e8-81c7-d3dcc4528819 传入:未定义  14:00:57 2018-03-25T14:00:57.232Z f07a7595-3034-11e8-81c7-d3dcc4528819 ===发送电子邮件=== 2018-03-25T14:00:57.232Z f07a7595-3034-11e8-81c7-d3dcc4528819 ===发送电子邮件===  14:00:58 2018-03-25T14:00:58.095Z f07a7595-3034-11e8-81c7-d3dcc4528819 { [ValidationError:检测到 1 个验证错误:“目标”处的值为 null 未能满足约束:成员不得为 null] 消息:'1 验证检测到错误:\'destination\' 处的值 null 未能满足约束:成员不得为 null',代码:'ValidationError',时间:2018 年 3 月 25 日星期日 14:00:58 GMT+0000 (UTC),r 2018-03-25T14:00:58.095Z f07a7595-3034-11e8-81c7-d3dcc4528819 { [ValidationError:检测到 1 个验证错误:“目标”处的值为 null 未能满足约束:成员不得为 null] 消息:'检测到 1 个验证错误:\'destination\' 处的值为 null 未能满足约束:成员不得为 null', 代码:'验证错误', 时间:2018 年 3 月 25 日星期日 14:00:58 GMT+0000 (UTC), requestId: 'f14b32f1-3034-11e8-897b-633b17ff4491', 状态码:400, 可重试:假, 重试延迟:54.40075590740889 }  14:00:58 结束请求 ID:f07a7595-3034-11e8-81c7-d3dcc4528819 结束请求 ID:f07a7595-3034-11e8-81c7-d3dcc4528819  14:00:58 报告请求 ID:f07a7595-3034-11e8-81c7-d3dcc4528819 持续时间:1498.93 毫秒计费持续时间:1500 毫秒内存大小:128 MB 使用的最大内存:37 MB

【问题讨论】:

    标签: node.js lambda api-gateway


    【解决方案1】:

    记录事件并查看其结构。由于电子邮件未定义,您的功能从一开始就失败。在 API Gateway 中,如果您定义了LAMBDA PROXY INTEGRATION,您的事件主体将是这样的结构:

    {
      "message": "Good day, John of Seattle. Happy Friday!",
      "input": {
        "resource": "/{proxy+}",
        "path": "/Seattle",
        "httpMethod": "POST",
        "headers": {
          "day": "Friday"
        },
        "queryStringParameters": {
          "time": "morning"
        },
        "pathParameters": {
          "proxy": "Seattle"
        },
        "stageVariables": null,
        "requestContext": {
          "path": "/{proxy+}",
          "accountId": "123456789012",
          "resourceId": "nl9h80",
          "stage": "test-invoke-stage",
          "requestId": "test-invoke-request",
           ... 
          },
          "resourcePath": "/{proxy+}",
          "httpMethod": "POST",
          "apiId": "r275xc9bmd"
        },
        "body": "{ \"callerName\": \"John\" }",
        "isBase64Encoded": false
      }
    }
    

    您想读取 queryStringParameters 对象。

    【讨论】:

      【解决方案2】:

      好的。我解决了这个问题。需要用 JSON.parse 解析 JSOn,然后它才能工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-28
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 2017-12-30
        • 1970-01-01
        相关资源
        最近更新 更多