【发布时间】:2021-05-03 03:31:54
【问题描述】:
我正在使用 AWS CDK,到目前为止已经实现了 API Gateway,其中 Lambda 函数指向 DynamoDB。到目前为止,我的 POST/GET 基本 lambda 函数都可以正常工作,因为它相当简单。但是,我现在遇到了一个问题,因为我需要一个更具体的 GET 方法。
对于上下文,假设我有一个产品数据库。每条记录都有以下属性:
{
"id": "0981a086-7c78-4ce1-a1e7-3af641233a46",
"name": "test product",
"price": 1.99,
"tags": ["tag1", "tag2", "tag3"...]
}
我将有一个传入标签的端点,我需要从包含传入列表中的标签的表中获取所有产品。希望这是有道理的。我相信问题在于我对FilterExpression 的错误使用,它目前返回Missing required key 'RequestItems' in params。我的研究表明我可以改用查询,但我认为这不是最好的方法,而且它给了我一些其他错误。所以在我进入兔子洞之前,我想我会寻求帮助。
这是我目前失败的 Lambda:
const db = new AWS.DynamoDB.DocumentClient();
const TABLE_NAME = process.env.TABLE_NAME || "";
const PRIMARY_KEY = process.env.PRIMARY_KEY || "";
async function getProductByTags(event) {
const { tags } = event; // ["tag2", "tag3"]
const params = {
FilterExpression: `contains (tags, ${tags})`,
TableName: TABLE_NAME
};
try {
const response = await db
.batchGet(params)
.promise();
return {
statusCode: 200,
body: response
}
} catch (err) {
return {
statusCode: 500,
body: `Error getting product. ${err.message}`
}
}
}
将batchGet 更改为query 会出现此错误:Either the KeyConditions or KeyConditionExpression parameter must be specified in the request
【问题讨论】:
标签: node.js amazon-web-services amazon-dynamodb documentclient