dynamodb deleteItem 有效,但它的回调返回未定义
dynamodb deleteItem works, but it's callback returning undefined
我创建了一个 deleteItem lambda 函数,如果找到一个项目的 userId,它会删除该项目。 userId 作为 pathParameter
传递,如果找到 userId 则没有问题。
let output = await deleteUser(userId);
console.log("output: " + JSON.stringify(output))
总是returns output: undefined
每次是否找到并删除。我需要 deleteItem
操作的响应,以便我可以 return 消息 User not found
或 User deleted
基于该响应。
如何让 dynamodb 回调正常工作?
delete.js
const AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
const dynamoDB = new AWS.DynamoDB();
const tableName = process.env.TABLE_NAME;
exports.handler = async (event) => {
let userId = event.pathParameters.userid;
try {
let output = await deleteUser(userId);
console.log("output: " + JSON.stringify(output))
return {
statusCode: 200,
body: JSON.stringify({
message: "User deleted"
})
};
} catch (err) {
console.log("ERROR TIME")
console.log("ERROR:" + err)
return {
statusCode: 500,
body: JSON.stringify({
message: "User failed to be deleted"
})
};
}
async function deleteUser(userId) {
let params = {
TableName: tableName,
"Key": {
"userid": {
"S": userId.toString()
}
}
};
try {
const dbResponse = await dynamoDB.deleteItem(params).promise();
console.log("dbResponse")
console.log(dbResponse)
if (dbResponse.Item) {
console.log(`deleted row with userId of ${userId}`);
return (dbResponse);
}
} catch (err) {
console.log(`user reset failed with ${err}`);
return {
statusCode: 500,
body: JSON.stringify({
errr: err
})
};
}
}
};
这是因为 dbResponse
没有名为 Item
的 属性,所以这个条件永远不会满足:
if (dbResponse.Item) {
我建议查看 the documentation 以查看预期的响应格式,或者至少记录 dbResponse
以便您可以查看返回的内容。
我创建了一个 deleteItem lambda 函数,如果找到一个项目的 userId,它会删除该项目。 userId 作为 pathParameter
传递,如果找到 userId 则没有问题。
let output = await deleteUser(userId);
console.log("output: " + JSON.stringify(output))
总是returns output: undefined
每次是否找到并删除。我需要 deleteItem
操作的响应,以便我可以 return 消息 User not found
或 User deleted
基于该响应。
如何让 dynamodb 回调正常工作?
delete.js
const AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
const dynamoDB = new AWS.DynamoDB();
const tableName = process.env.TABLE_NAME;
exports.handler = async (event) => {
let userId = event.pathParameters.userid;
try {
let output = await deleteUser(userId);
console.log("output: " + JSON.stringify(output))
return {
statusCode: 200,
body: JSON.stringify({
message: "User deleted"
})
};
} catch (err) {
console.log("ERROR TIME")
console.log("ERROR:" + err)
return {
statusCode: 500,
body: JSON.stringify({
message: "User failed to be deleted"
})
};
}
async function deleteUser(userId) {
let params = {
TableName: tableName,
"Key": {
"userid": {
"S": userId.toString()
}
}
};
try {
const dbResponse = await dynamoDB.deleteItem(params).promise();
console.log("dbResponse")
console.log(dbResponse)
if (dbResponse.Item) {
console.log(`deleted row with userId of ${userId}`);
return (dbResponse);
}
} catch (err) {
console.log(`user reset failed with ${err}`);
return {
statusCode: 500,
body: JSON.stringify({
errr: err
})
};
}
}
};
这是因为 dbResponse
没有名为 Item
的 属性,所以这个条件永远不会满足:
if (dbResponse.Item) {
我建议查看 the documentation 以查看预期的响应格式,或者至少记录 dbResponse
以便您可以查看返回的内容。