如何使用 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
调用转换为 promise
和 await
作为响应。它看起来像这样
try{
const data = await ddb.putItem(params).promise();
console.log("Item entered successfully:", data);
} catch(err){
console.log("Error: ", err);
}
我已经使用 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
调用转换为 promise
和 await
作为响应。它看起来像这样
try{
const data = await ddb.putItem(params).promise();
console.log("Item entered successfully:", data);
} catch(err){
console.log("Error: ", err);
}