迁移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
相关产品推荐
相关产品推荐

