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体积更小、模块化更强,步骤如下:
- 安装所需依赖:
npm install @aws-sdk/client-dynamodb @aws-sdk/util-dynamodb
- 修改代码为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
相关产品推荐
相关产品推荐

