【问题标题】:AWS @aws-sdk/lib-dynamodb 'Cannot read property '0' of undefined'AWS @aws-sdk/lib-dynamodb '无法读取未定义的属性'0''
【发布时间】:2022-04-12 18:44:35
【问题描述】:

我尝试利用 @aws-sdk/lib-dynamodb 来简化从 AWS DynamoDB 检索数据。

# aws.js
const {DynamoDBClient,ScanCommand} = require('@aws-sdk/client-dynamodb');
const { DynamoDBDocumentClient } = require('@aws-sdk/lib-dynamodb');
const { fromIni } = require('@aws-sdk/credential-provider-ini');
const client = new DynamoDBClient({
    credentials: fromIni({ profile: process.env.AWS_PROFILE }),
    region: process.env.AWS_DEFAULT_REGION,
});

const ddb_client = DynamoDBDocumentClient.from(client);

const listItemsDDB = async (params) => {
    try {
        const command = new ScanCommand(params);
        const data = await ddb_client.send(command);
        return data;
    } catch (err) {
        throw Error(err);
    }
};
module.exports = {listItemsDDB };

我将函数导入我的rest_api.js。 一切都基于一个 express js 应用程序。

...trimmed...

app.get('/courses/:year/:location/:month', async (req, res, next) => {
    console.log(req.params);
    const payload = {
        TableName: ddb_calendar_name,
        FilterExpression: '#l = :loc and #m = :month and #y = :year',
        ExpressionAttributeValues: {
            ':loc': req.params.location,
            ':month': req.params.month,
            ':year': req.params.year,
        },
        ExpressionAttributeNames: {
            '#l': 'Location',
            '#m': 'Month',
            '#y': 'Year',
        },
    };
    try {
        const result = await aws.listItemsDDB(payload);
        return res.status(200).send(result.Items[0]);
    } catch (error) {
        next(error);
    }
});

我的数据如下所示:

{
  "Id": {
    "S": "02322f8f-05a7-4e27-aaf9-08129f3128ef"
  },
  "Location": {
    "S": "schildergasse"
  },
  "Month": {
    "S": "august"
  },
  "Year": {
    "S": "2021"
  }
}

我使用休息客户端来测试端点。 触发 GET http://localhost:4000/courses/2021/schildergasse/august 后,我​​收到:

错误:TypeError:无法读取未定义的属性“0” 在 Object.listItemsDDB (/Users/olivergoetz/fifi-calendar/server/aws.js:39:9) 在 processTicksAndRejections (node:internal/process/task_queues:96:5) 在异步 /Users/olivergoetz/fifi-calendar/server/rest_api.js:221:18

我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    我从错误的库中导入了ScanCommand

    我不得不改变这个:

    const {DynamoDBClient,ScanCommand} = require('@aws-sdk/client-dynamodb');
    const { DynamoDBDocumentClient } = require('@aws-sdk/lib-dynamodb');
    

    到这里:

    const {DynamoDBClient} = require('@aws-sdk/client-dynamodb');
    const { DynamoDBDocumentClient, ScanCommand } = require('@aws-sdk/lib-dynamodb');
    

    【讨论】:

    • 谢谢!!找了这么久:')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2023-02-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多