You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS NodeJS TypeScript SDK V3 DynamoDB PutItemCommand类型错误排查

DynamoDBDocumentClient插入数据时抛出TypeError: Cannot read properties of undefined (reading '0')

问题原因

你混用了DynamoDB基础客户端与Document客户端的命令。PutItemCommand属于@aws-sdk/client-dynamodb,是给原生DynamoDBClient使用的,需要手动指定字段类型;而你使用的DynamoDBDocumentClient(来自@aws-sdk/lib-dynamodb)需要搭配对应的PutCommand,它会自动完成JS对象与DynamoDB数据格式的编解码,无需手动处理类型。

修正后的代码

import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
import { DynamoDBDocumentClient, PutCommand } from '@aws-sdk/lib-dynamodb'; // 导入正确的PutCommand

export async function postVideo(
    event: APIGatewayProxyEvent,
    ddbClient: DynamoDBClient
): Promise<APIGatewayProxyResult> {
    const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);

    // 处理请求体为空的情况
    if (!event.body) {
        return {
            statusCode: 400,
            body: JSON.stringify({ error: "请求体不能为空" })
        };
    }

    const item = JSON.parse(event.body);

    // 校验必要字段是否存在
    if (!item.owner || !item.title) {
        return {
            statusCode: 400,
            body: JSON.stringify({ error: "owner和title字段为必填项" })
        };
    }

    const currentDateTime = new Date().toISOString();
    const pk = `VIDEO`;
    const sk = `${item.owner}#${item.title}#${currentDateTime}`;
    item.PK = pk;
    item.SK = sk;

    try {
        const result = await ddbDocClient.send(
            new PutCommand({ // 使用Document客户端对应的PutCommand
                TableName: process.env.TABLE_NAME,
                Item: item,
            })
        );
        console.log(result);

        return {
            statusCode: 201,
            body: JSON.stringify({ PK: pk, SK: sk }),
        };
    } catch (error) {
        console.error('插入数据失败:', error);
        return {
            statusCode: 500,
            body: JSON.stringify({ error: "插入视频信息失败" })
        };
    }
}

额外检查项

  • 确保环境变量TABLE_NAME已正确配置为你的DynamoDB表名
  • 确认DynamoDB表的主键(PK/SK)配置与代码中设置的字段一致

内容的提问来源于stack exchange,提问作者Luis Lomba Martínez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:35:10