【问题标题】:dynamodb deleteItem works, but it's callback returning undefineddynamodb deleteItem 有效,但它的回调返回未定义
【发布时间】:2020-12-05 00:30:28
【问题描述】:

我创建了一个 deleteItem lambda 函数,如果找到它的 userId,它会删除一个项目。 userId 是作为pathParameter 传递的,如果找到了 userId 就没有问题。

let output = await deleteUser(userId);
console.log("output: " + JSON.stringify(output))

总是返回output: undefined

每次无论它是否被发现和删除。我需要来自deleteItem 操作的响应,以便我可以根据该响应返回消息User not foundUser deleted

如何让 dynamodb 回调正常工作?

删除.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
                })
            };
        }
    }


};

【问题讨论】:

    标签: node.js amazon-web-services amazon-dynamodb


    【解决方案1】:

    这是因为dbResponse 没有名为Item 的属性,所以这个条件永远不会满足:

     if (dbResponse.Item) {
    

    我建议查看 the documentation 以了解预期的响应格式是什么,或者至少记录 dbResponse 以便查看返回的内容。

    【讨论】:

    • 我在原始问题的const dbResponse = await dynamoDB.deleteItem(params).promise();下添加了一个控制台日志来演示。我第一次尝试删除不存在的用户标识。我第二次删除了一个确实存在的项目(成功)。两次,console.log(dbResponse) 的输出都是{} 即使 Item 不是命名的属性,它也应该在执行 deleteItem 操作时返回一些东西。您对为什么会发生这种情况有任何建议吗?
    • 为什么你认为它应该总是返回一些东西?您没有设置ReturnConsumedCapacityReturnItemCollectionMetricsReturnValues,因此它不会返回任何内容。请花时间阅读文档。
    • 感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多