使用二级索引删除 DynamoDB table 中的元素时出现问题
Problem deleting an element in the DynamoDB table with secondary index
我被卡住了,因为我在删除 DynamoDB table 中具有主键和全局二级索引(没有排序键)的元素时遇到问题。
我收到以下错误:
“提供的关键元素与模式不匹配”
我很绝望,我也试图查看本站其他帖子的答案,但我找不到任何关于删除的信息。
这是我的代码:
const AWS = require("aws-sdk");
const dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event, context) => {
let body;
let statusCode = 200;
const headers = {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "DELETE",
};
try {
switch (event.routeKey) {
case "DELETE /fragments/{id}":
await dynamo
.delete({
TableName: "fragment",
Key: {
id: event.pathParameters.id
}
})
.promise();
body = `Deleted fragment ${event.pathParameters.id}`;
break;
default:
throw new Error(`Unsupported route: "${event.routeKey}"`);
}
} catch (err) {
statusCode = 400;
body = err.message;
} finally {
body = JSON.stringify(body);
}
return {
statusCode,
body,
headers
};
};
TL;DR 将 event.pathParameters.id
从 string
转换为 number
类型。
// convert id from string to number
Key: { id: parseInt(event.pathParameters.id, 10) }
DynamoDB.DocumentClient
infers the key schema types 来自 Key
中的 javascipt 类型。 event.pathParameters.id
是一个字符串,但您的键模式需要一个数字,因此 DynamoDB returns 模式不匹配错误。
我们怎么知道 event.pathParameters.id
是 string
? lambda typings for API Gateway events 告诉我们:
// APIG event pathParameters
export interface APIGatewayProxyEventPathParameters {
[name: string]: string | undefined;
}
我被卡住了,因为我在删除 DynamoDB table 中具有主键和全局二级索引(没有排序键)的元素时遇到问题。
我收到以下错误: “提供的关键元素与模式不匹配”
我很绝望,我也试图查看本站其他帖子的答案,但我找不到任何关于删除的信息。
这是我的代码:
const AWS = require("aws-sdk");
const dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event, context) => {
let body;
let statusCode = 200;
const headers = {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "DELETE",
};
try {
switch (event.routeKey) {
case "DELETE /fragments/{id}":
await dynamo
.delete({
TableName: "fragment",
Key: {
id: event.pathParameters.id
}
})
.promise();
body = `Deleted fragment ${event.pathParameters.id}`;
break;
default:
throw new Error(`Unsupported route: "${event.routeKey}"`);
}
} catch (err) {
statusCode = 400;
body = err.message;
} finally {
body = JSON.stringify(body);
}
return {
statusCode,
body,
headers
};
};
TL;DR 将 event.pathParameters.id
从 string
转换为 number
类型。
// convert id from string to number
Key: { id: parseInt(event.pathParameters.id, 10) }
DynamoDB.DocumentClient
infers the key schema types 来自 Key
中的 javascipt 类型。 event.pathParameters.id
是一个字符串,但您的键模式需要一个数字,因此 DynamoDB returns 模式不匹配错误。
我们怎么知道 event.pathParameters.id
是 string
? lambda typings for API Gateway events 告诉我们:
// APIG event pathParameters
export interface APIGatewayProxyEventPathParameters {
[name: string]: string | undefined;
}