包含类型脚本4.4.2和@types/node 16.7.10的AWS JavaScript SDK v3抛出错误类型

wf82jlnq  于 2022-12-18  发布在  Node.js
关注(0)|答案(2)|浏览(123)

我今天(几个月后)用最新的软件包版本更新了我的package.json文件,我认为影响这个错误的是问题主题中的那些。
一些错误处理块如下

try {
  // ...
} catch(err) {
  console.log(err.message);
}

由于TypeScript错误2571: Object is of type 'unknown'.而停止工作
很好!我只需要应用以下简单的更改:

try {
  // ...
} catch(err) {
  console.log(err instanceof Error ? err.message : JSON.stringify(err));
}

不仅我的代码再次开始工作,而且我觉得我的代码也更有弹性。
当我尝试处理AWS SDK v3抛出的错误时,问题出现了。

import { CloudWatchLogs, ResourceNotFoundException } from "@aws-sdk/client-cloudwatch-logs";

const cwl = new CloudWatchLogs({ region: "us-east-2" });

try {
  const logGroupName = "...";
  const logStreamName = "...";
  const { events } = await cwl.getLogEvents({ logGroupName, logStreamName });

  // ...
} catch(err) {
  if(! (err instanceof ResourceNotFoundException)) console.log(err);
}


在上面的简化代码示例中(我不处理分页),我只想忽略ResourceNotFoundException,但是err instanceof ResourceNotFoundException检查没有编译,因为ResourceNotFoundExceptioninterface而不是class
我发现这个答案似乎可以帮助我。

**问题是:**我应该为我需要处理的每个AWS异常编写一个instanceOf\w+Exception函数(对于regexp,我很抱歉),还是AWS提供了一种通用的可重用方法?

我寻求这个的主要原因不是我懒惰(我确实是),而是如果我编写自己的instanceOf\w+Exception函数来检查AWS SDK源代码,如果Amazon更改SDK中的某些内容,我的函数可能会停止工作。

jm81lzqq

jm81lzqq1#

我找到了this issue:我强烈怀疑,此刻,答案很简单:不,没有。

**编辑:**同样的问题解决了,现在我们可以使用instanceof操作符(我还没有测试过)。

y0u0uwnf

y0u0uwnf2#

2022年更新
AWS SDK v3现在使用instanceof并弃用类型脚本sdkerror
https://aws.amazon.com/blogs/developer/service-error-handling-modular-aws-sdk-js

import {
  InvalidSignatureException,
  ResourceNotFoundException,
  FooServiceException,
} from "@aws-sdk/client-foo";

显然,用您正在使用的客户机替换foo

try {
  await client.send(someCommand);
} catch (e) {
  if (e instanceof InvalidSignatureException) {
    // Handle InvalidSignatureException
  } else if (e instanceof ResourceNotFoundException) {
    // Handle ResourceNotFoundException
  } else if (e instanceof FooServiceException) {
    // Handle all other server-side exceptions from Foo service
  } else {
    // Other errors
  }
}

相关问题