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

迁移AWS SDK for NodeJS从v2到v3时遇TypeError: sns is not a constructor

问题解答

首先看你的错误,核心问题出在导入的客户端名称、大小写规则上,AWS SDK v3的命名规范和v2有明显区别,另外还有几个细节需要调整:

错误点逐一修正:

  • 导入的客户端类是大驼峰命名的SNS,不是小写的sns
  • 命令类的正确名称是AddPermissionCommand,不是下划线分隔的sns_add_permission_command
  • AWS SDK v3的客户端不需要手动指定apiVersion,客户端已内置对应服务的API版本,直接删除该参数即可

修正后的完整代码示例:

const { SNS, AddPermissionCommand } = require("@aws-sdk/client-sns");

// 创建SNS客户端实例
const snsClient = new SNS({
  region: "eu-west-1"
});

// 调用权限添加接口的示例(v3用send方法,自带Promise)
async function addSNSPermission() {
  const command = new AddPermissionCommand({
    // 填入你的业务参数
    TopicArn: "arn:aws:sns:eu-west-1:你的账号ID:目标主题",
    Label: "自定义权限标签",
    AWSAccountId: ["授权的账号ID"],
    ActionName: ["sns:Publish"]
  });

  try {
    const response = await snsClient.send(command);
    console.log("权限添加成功:", response);
  } catch (error) {
    console.error("权限添加失败:", error);
  }
}

// 执行函数
addSNSPermission();

关于codemod遗漏.promise()的问题:

AWS SDK v2中client.method().promise()的写法,在v3里要替换为client.send(new Command())——因为send方法本身就返回Promise,不需要再额外调用.promise()。你可以全局排查代码中的这类异步调用,统一改成v3的send模式,避免代码挂起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:33:12