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

Node.js中AWS-SDK v3的TransactWriteItemsCommand调用报错求助

问题排查与修复

错误原因

你错误地将低级DynamoDB客户端的TransactWriteItemsCommand与文档客户端DynamoDBDocumentClient混用了。低级客户端要求Item必须是DynamoDB的AttributeValue格式(如{ S: "myPK" }),而文档客户端需要搭配@aws-sdk/lib-dynamodb提供的TransactWriteCommand使用,它会自动完成原生JS类型到DynamoDB类型的转换,不需要手动序列化。

修复后的代码

const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');
const { DynamoDBDocumentClient, TransactWriteCommand } = require('@aws-sdk/lib-dynamodb');

let options = {
    maxRetries: 3,
    httpOptions: {
        timeout: 5000,
    },
};

const client = new DynamoDBClient(options);

const input = { 
    TransactItems: [
        { 
            Put: { 
                TableName: "my-table-name",
                Item: {
                    PK: "myPK",
                    SK: "mySK",
                    name: "aname",
                    code: "acode",
                    price: 200,
                    createdAt: "2023-11-07T13:36:12.045Z",
                    updatedAt: "2023-11-07T13:36:12.045Z"
                }
            }
        }
    ]
};

const ddbDocClient = DynamoDBDocumentClient.from(client);

ddbDocClient.send(new TransactWriteCommand(input));

关键注意点

  • 文档客户端DynamoDBDocumentClient必须使用@aws-sdk/lib-dynamodb包内的命令(如TransactWriteCommand、PutCommand等),而非@aws-sdk/client-dynamodb包内的低级命令
  • 若坚持使用低级客户端的TransactWriteItemsCommand,则需要手动将Item的每个字段转换为AttributeValue格式,例如:PK: { S: "myPK" }、price: { N: "200" }

内容的提问来源于stack exchange,提问作者Eb3us

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:25:55