使用 pk 和 sk returns undefined 通过 lambda 查询 dynamodb

query on dynamodb through lambda using pk and sk returns undefined

我有一个 lambda 函数,它使用 pk 和 sk 调用 dynamodb table。出于某种原因,我得到的 return 数据未定义。检查 cloudwatch 日志后,我看到以下错误消息。我在这里做错了什么?

2021-10-01T00:15:03.104Z cdd7201f-0c95-4283-9257-c07324998896 INFO BOL 数据:未定义

2021-10-01T00:15:03.124Z cdd7201f-0c95-4283-9257-c07324998896 信息 BOL 错误:类型错误:无法读取未定义的 属性 'PK' 在 getUserById (/var/task/getUserById.js:16:27) 在 processTicksAndRejections (internal/process/task_queues.js:95:5)

这是错误所指的 lambda 代码 -

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

async function getUserById(userId) {
    console.log('USERID:',userId);
    const params = {
        TableName:"Bol",
        KeyConditionExpression: 'PK = :hashKey and SK = :sortKey',
        ExpressionAttributeValues: {
            ':hashKey': userId,
            ':sortKey': 'USER'
        }
    };
    try {
        const { Item } = await docClient.query(params).promise();
        console.log('BOL Data:',Item);
        return { id: Item.PK, name: Item.Data.displayName };
    } catch(err) {
        console.log("BOL Error: ", err);
    }
 }
 
 module.exports = getUserById;

下面是我应该在 lambda 上收到的数据 -

这是你初始化 Item

的方式

您可以尝试使用以下方法获取对象

 try {
        const Item  = await docClient.query(params).promise();
        Item.Items.forEach(function(item) {
            let buffer=item.Data+" -- "+item.PK;
           console.log("buffer ",buffer)
        });
        
    } catch(err) {
        console.log("BOL Error: ", err);
    }

您可以通过多种方式获得好评:

Making Requests with the Document Client