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

NestJS使用@aws-sdk/client-dynamodb对接DynamoDB报byteLength未定义错误

问题分析与解决方案

该错误的核心原因是传入DynamoDB客户端的accessKeyId或secretAccessKey实际为undefined,@aws-sdk在对密钥做编码转换时尝试读取undefined的byteLength属性,因此抛出对应报错。

可按以下步骤排查修复:

  • 校验dotenv加载时序
    确认你在实例化DynamoDB客户端之前,已经完成了dotenv的配置加载。如果是在NestJS的自定义Provider、模块初始化阶段实例化客户端,必须保证dotenv.config()的调用早于客户端实例化代码的执行,最常见的错误场景就是将dotenv配置写在了客户端实例化代码之后。
  • 验证环境变量取值
    可以在实例化客户端前新增日志打印,确认两个环境变量是否正常读取:
console.log('AWS_ACCESS_KEY_ID:', process.env.AWS_ACCESS_KEY_ID)
console.log('AWS_SECRET_ACCESS_KEY:', process.env.AWS_SECRET_ACCESS_KEY)

如果打印结果为undefined,检查.env文件是否放在项目根目录、文件名是否正确、环境变量名拼写是否和.env文件内完全一致。

  • 改用默认凭证链加载(可选)
    如果确认dotenv加载没有问题,可以换用AWS SDK的默认凭证链加载逻辑,不需要显式传入credentials参数,SDK会自动从环境变量、本地~/.aws/credentials文件、ECS/EC2实例角色等位置自动读取凭证,修改实例化代码为:
import { DynamoDB } from "@aws-sdk/client-dynamodb";

const client = new DynamoDB({
    region: 'eu-west-2'
});

该方式可以避免手动传凭证时可能出现的拼写、加载时序问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:51:01