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

CDK教程代码报错:dynamo.updateItem(...).promise不存在 如何修复?

修复dynamo.updateItem(...).promise is not a function错误

这个错误的核心原因是AWS SDK版本不匹配:你写的是SDK v2的代码,但当前环境用的是SDK v3——v3彻底重构了API,不再支持.promise()链式调用,同时参数格式也有变化。

下面给两种修复方案:

方案1:继续使用AWS SDK v2

如果不想升级SDK,确保你的项目依赖是旧版的aws-sdk:

  • 检查package.json,确保依赖是"aws-sdk": "^2.x.x"而非@aws-sdk/client-dynamodb
  • 原代码可以保持不变,v2的updateItem方法确实支持.promise()

方案2:迁移到AWS SDK v3(官方推荐)

这是目前的主流方案,v3体积更小、模块化更强,步骤如下:

  1. 安装所需依赖:
npm install @aws-sdk/client-dynamodb @aws-sdk/util-dynamodb
  1. 修改代码为v3的命令式写法:
// 导入v3模块
import { DynamoDBClient, UpdateItemCommand } from "@aws-sdk/client-dynamodb";
import { marshall } from "@aws-sdk/util-dynamodb";

// 初始化DynamoDB客户端
const dynamo = new DynamoDBClient({});

// 替换原updateItem代码
await dynamo.send(new UpdateItemCommand({
  TableName: process.env.HITS_TABLE_NAME,
  Key: marshall({ path: event.path }), // 自动转换类型格式
  UpdateExpression: 'ADD hits :incr',
  ExpressionAttributeValues: marshall({ ':incr': 1 })
}));

关键变化说明:

  • v3需要创建对应操作的Command对象(比如UpdateItemCommand),再通过客户端的send()方法执行
  • 使用marshall工具自动将JS对象转换为DynamoDB要求的类型格式(无需手动写{ S: xxx }或{ N: xxx })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:04:57