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

将AWS DynamoDB JS调用从v2升级到v3时遇语法错误求助

解决DynamoDB v3升级的SyntaxError及查询问题

错误根源

你遇到的SyntaxError: Cannot use import statement outside a module是因为混合使用了ES6模块的import和CommonJS的require,Node.js默认将.js文件视为CommonJS模块,不允许直接使用import语法。此外你的代码还存在v2和v3 SDK混用、v3 API调用方式错误的问题。

分步修复方案

1. 统一模块系统,清理冗余代码

删除所有import语句,全部改用CommonJS的require;同时移除v2版本的AWS SDK导入(const AWS = require('aws-sdk')),v3不需要这个。

2. 正确配置v3客户端

v3的客户端配置直接在创建DynamoDBClient实例时传入,不需要像v2那样调用AWS.config.update。另外推荐使用DynamoDBDocumentClient,它能自动处理DynamoDB原生类型(如数字、字符串)和JS类型的转换,不用手动写N:"4"这种格式。

3. 使用v3的命令式API

v3不再支持v2的回调式调用(如docClient.get(params, callback)),而是通过创建GetCommand对象,再用客户端的send方法执行,返回Promise,推荐用async/await处理异步逻辑。

修正后的完整代码

// 仅导入v3需要的模块
const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const { DynamoDBDocumentClient, GetCommand } = require("@aws-sdk/lib-dynamodb");

// 配置客户端
const client = new DynamoDBClient({
  region: "us-west-2",
  credentials: {
    accessKeyId: "*insert keyID*",
    secretAccessKey: "*insert secret key*"
  }
});

// 创建DocumentClient,自动处理类型转换
const docClient = DynamoDBDocumentClient.from(client);

// 用async/await实现查询逻辑
async function fetchOneByKey() {
  try {
    const params = {
      TableName: "scout",
      Key: {
        "2637": 4 // 直接用JS数字类型,DocumentClient会自动转为DynamoDB的N类型
      },
      ProjectionExpression: "auto_docked"
    };

    const response = await docClient.send(new GetCommand(params));
    console.log("查询结果:", JSON.stringify(response.Item, null, 2));
  } catch (err) {
    console.error("查询出错:", JSON.stringify(err, null, 2));
  }
}

// 执行查询
fetchOneByKey();

关键说明

  • 模块统一:全部用require符合Node.js默认的CommonJS模块规则,避免模块系统冲突。
  • DocumentClient:简化了类型处理,不用手动指定N/S等DynamoDB数据类型。
  • 命令式API:v3的SDK采用命令对象模式,每个操作对应一个Command(如GetCommand、PutCommand),通过send方法执行,异步逻辑用async/await更清晰。
  • 配置方式:v3将配置直接传入客户端实例,不再依赖全局配置,更符合模块化设计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:35