如何使用 lambda(node.js) 将项目放入 DynamoDB 表中?

Sou*_*aul 2 amazon-web-services node.js amazon-dynamodb aws-lambda aws-api-gateway

我已经使用 SAM 部署了 API Gateway、Lambda 和 DynamoDB。lambda 函数的代码如下:

var AWS = require('aws-sdk');


exports.handler = async (event) => {
    try {
        
        console.log(event);         //To check if there is any problem with the API call or not, (CloudWatch result = No issues)
        console.log(event.body);    // To confirm if the 'event' is a JSON object or not. (CloudWatch result = No issues)
        var obj = JSON.parse(event.body);
        
        console.log(obj.id);
        console.log(obj.name);
        
        var ID = obj.id;
        var NAME = obj.name;
        
        var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
        
        var params = {
            TableName: 'tabmine',
            Item: {
                 id : {S: ID},
                 name : {S: NAME}
            }
        };
        
        ddb.putItem(params, function(err,data){
            if(err){
                console.log("Error: ", err);
            }
            else
            {
                console.log("Item entered successfully:", data);
            }
        });
        
        var response = {
                'statusCode': 200,
                'body': JSON.stringify({
                    message: 'Data entered successfully'
            })
        };
    } catch (err) {
        console.log(err);
        return err;
    }

    return response;
};
Run Code Online (Sandbox Code Playgroud)

使用 Curl,我运行以下命令来输入请求正文中提到的数据。

 curl -X POST -d '{"id":"1","name":"sam"}' https://0000000000.execute-api.ap-south-1.amazonaws.com/Prod/writedb

Run Code Online (Sandbox Code Playgroud)

它运行成功了。但当我检查 DynamoDB 表时,没有数据存在。

然后我检查了CloudWatch日志,没有发现任何错误。但根据我的 lambda 代码,如果新项目成功输入到 DynamoDB 表中,则console.log("Item entered successfully:", data);应该执行,并且我应该在 CloudWatch 中获取输出。但我没有得到任何输出。

从上面的场景中,我得出的结论是,在 lambda 函数代码中,以下语句不会被执行。

 ddb.putItem(params, function(err,data){
            if(err){
                console.log("Error: ", err);
            }
            else
            {
                console.log("Item entered successfully:", data);
            }
        });
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么这部分代码没有被执行。请帮忙。

Set*_*gan 8

没有打印任何内容,因为异步 lambda 代码在调用putItem完成其工作之前完成。

您应该将putItem呼叫转换promiseawait响应。它看起来像这样

try{
    const data = await ddb.putItem(params).promise();
    console.log("Item entered successfully:", data);
} catch(err){
    console.log("Error: ", err);
}
Run Code Online (Sandbox Code Playgroud)