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

How to put items into DynamoDB table using lambda(node.js)?

我已经使用 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;
};

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

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

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

然后我检查了CloudWatch日志,没有发现错误。 但是根据我的 lambda 代码,如果在 DynamoDB table 中成功输入了一个新项目,那么应该执行 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);
            }
        });

我不明白为什么这部分代码没有被执行。请帮忙。

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

您应该将 putItem 调用转换为 promiseawait 作为响应。它看起来像这样

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