【发布时间】: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