使用二级索引删除 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;DRevent.pathParameters.idstring 转换为 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.idstringlambda typings for API Gateway events 告诉我们:

// APIG event pathParameters
export interface APIGatewayProxyEventPathParameters {
    [name: string]: string | undefined;
}