【问题标题】:DynamoDB : Query always returning nullDynamoDB:查询总是返回 null
【发布时间】:2019-11-26 07:57:22
【问题描述】:

我是 DynamoDB 的新手,我只是创建了一个表,我在其中插入了一些虚拟行来测试读/写功能。

这是我的数据。

我创建了一个 Lambda 来访问这些数据,通过 Partition Key ok Sort Key 但我最终每次都返回 null :'(

这是我的 lambda 代码:

    const dynamodb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10', region: 'eu-west-1'});

exports.handler = async (event,context,callback) => {
    var params = {
        TableName : "DontMissAPlaceTable",
        KeyConditionExpression: "Partition_Key = :id",
        ExpressionAttributeValues: {
            ":id": {"S" :  "media_001"}
        }
    };
    dynamodb.query(params, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(null, {
                statusCode: '500',
                body: err
            });
        } else {
            console.log(data)
            callback(null, {
                statusCode: '200',
                body: data
            });
        }
    })

};

我最初以为是无法访问该表,但似乎我拥有正确的权限。

我很确定这是一个虚拟问题,但我无法弄清楚......

感谢您的帮助:D

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb aws-sdk


    【解决方案1】:

    您的 Lambda 函数是 async,但您的代码使用回调。到达回调时,您的函数已经被终止,因为它是异步运行的。

    与其使用过时的、令人困惑的回调方法,不如坚持使用async/await。适用于 Node.js 的 AWS 开发工具包已经提供了一个 .promise() 方法,您可以在使用回调的异步方法上调用该方法,从而无缝连接到它们上的 await

    也就是说,将您的代码更改为:

    const dynamodb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10', region: 'eu-west-1'});
    
    exports.handler = async (event) => {
        const params = {
            TableName : "DontMissAPlaceTable",
            KeyConditionExpression: "Partition_Key = :id",
            ExpressionAttributeValues: {
                ":id": "media_001"
            }
        };
        return {
          statusCode: 200,
          body: JSON.stringify(await dynamodb.query(params).promise())
        }
    
    };
    

    由于您已经在使用 DocumentClient API,因此查询时无需指定类型(“S”、“N”等)。

    另外,请确保Partition_Key 确实是您的 分区键。您使用您在表中定义的名称,不是HashKey 也不是PartitionKey,这意味着如果您调用哈希键id,那么应该使用id

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多