@dotcom - 可靠性- kit/错误
一组错误类,帮助您在任何情况下抛出最合适的错误, 并识别何时知道错误对未知 。 此模块是 FT.com 可靠性工具包。 。 。 .
使用量
安装 @dotcom-reliability-kit/errors 作为依附关系:
npm install --save @dotcom-reliability-kit/errors
在代码中包含 :
import { OperationalError } from '@dotcom-reliability-kit/errors';
[TIP] 如果您使用此软件包并带有 TypeScript , 我们建议您使用以下设置:
tsconfig.json避免类型错误的文件 :{ "esModuleInterop": true, "module": "nodenext", "moduleResolution": "nodenext" }
此模块会导出不同的错误类别, 这些类别的工作不同 。 所有东西都可以以与上例相同的方式被导入.
OperationalError
这个 OperationalError 类是大多数其他出错类型的基础类。 此上下文"操作"意为"我们理解这个出错的原因",所以通过使用这个出错类型,帮助你的团队在抛出一个出乎意料的出错时理解.
Joyent 处理文件错误 对操作错误有一个很好的解释.
总是最好使用更具体的错误,例如. UpstreamServiceError,如果存在适合你需要的。 因此,审查这里的文档 找到最合适的错误.
OperationalError 可以像普通错误一样工作, 需要消息 :
throw new OperationalError('example message');
也可以用数据对象构建操作错误。 这个接受一个 code 属性,对于正在发生的错误类型,必须设置为指针,以及 message 包含可读信件的属性 :
throw new OperationalError({
message: 'example message',
code: 'EXAMPLE_CODE'
});
出错代码常态化为大写,字母数字,并下划线限制. 错误属性可以像其他属性一样访问 :
error.message // example message
error.code // EXAMPLE_CODE
也可以将这两种构建错误的方法结合起来,既传递信息,又传递附加选项. 这适用于所有错误类型:
throw new OperationalError('example message', {
code: 'EXAMPLE_CODE'
});
您也可以将额外属性传递到错误对象中,这些属性将被收集并存储在 data 错误属性 :
const error = new OperationalError({
message: 'example message',
code: 'EXAMPLE_CODE',
article: 'd92acacb-ac53-4505-aa88-eae4b42de994'
});
error.data.article // d92acacb-ac53-4505-aa88-eae4b42de994
OperationalError.id
这个 id 操作错误的属性存储一个用于向最终用户显示该错误的唯一标识符。 此错误ID必须符合 错误 ID 规格 否则将默认为 EI000。 。 。 .
[TIP] 如果您不确定, 请使用对系统有意义的内部错误代码, 匹配以下正则表达式 :
^EI[0-9]{3}$。欲了解更多关于预期格式和注册的用户信息 错误 ID 规格。您也可以通过 错误编号软件包。 。 。 .
OperationalError.relatesToSystems
这个 relatesToSystems 操作错误的属性存储列表 FT系统 与你抛出的错误有关.
这一阵列可包括:
- 返回 HTTP 错误状态代码的依赖性
- 未提供预期数据的数据存储
OperationalError.cause
这个 cause 操作出错的属性存储根因子出错实例,例如已捕获的出错 try编号 :catch 块。 它允许操作错误包含由根因子错误所捕获的诊断信息.
OperationalError.isErrorMarkedAsOperational()
您也可以使用 isErrorMarkedAsOperational 方法。 它接受任何类型的错误对象并将返回 true 如果错误有真伪 isOperational 财产和 false 否则:
OperationalError.isErrorMarkedAsOperational(new OperationalError('example message')); // true
OperationalError.isErrorMarkedAsOperational(new Error('example message')); // false
HttpError
这个 HttpError 类扩展 OperationalError 并代表 HTTP 错误状态。 它可以和普通错误一样工作,等待消息. 在这种情况下,它将代表一个HTTP 500数字 :
throw new HttpError('example message');
您也可以用数据对象构建 HTTP 错误 。 这个接受一个 statusCode 属性,它是一个有效的 HTTP 状态代码,以及您可以在其中设置的所有属性 OperationalError数字 :
throw new HttpError({
message: 'your thing was not found',
statusCode: 404
});
单用状态代码创建 HTTP 错误也是可能的,它会默认信件到相应的 HTTP 状态消息:
throw new HttpError(404);
错误属性可以像其他属性一样访问 :
error.message // your thing was not found
error.statusCode // 404
error.status // 404
error.statusMessage // Not Found
error.code // HTTP_404
为什么要用这个 http-errors? 吗?
使用这个错误而不是优秀的 网页错误 库就是我们延伸 OperationalError 默认。 这意味着你所抛出的所有HTTP出错被我们工具的其余部分视为"已知出错". 我们还定了一个 code 默认的属性导致监控仪表板的代码减少 code 财务报告和审定财务报表 statusCode 属性,以确定出错的类型.
DataStoreError
这个 DataStoreError 类扩展 OperationalError 并代表在访问数据存储时发生的错误,例如:MongoDB、PostgreSQL或Redis。 它具有操作错误的所有特性,你可以仅用一个信息构建:
throw new DataStoreError('Could not connect to Redis');
也可以用数据对象构建数据存储错误。 您可以使用定义于 OperationalError数字 :
throw new DataStoreError({
code: 'REDIS_CONNECTION_FAILED',
message: 'Could not connect to Redis',
});
UpstreamServiceError
这个 UpstreamServiceError 类扩展 HttpError 并代表连接上游服务时发生的错误,例如FT或第三方API。 它具有操作和HTTP出错的所有特性,你可以仅用一个消息来构建:
throw new UpstreamServiceError('Content could not be fetched');
HTTP 状态代码默认为 a 502 (中文(简体) )。这表明,在连接上游服务时,您的系统收到了无法为最终用户服务的答复.
也可以用数据对象构建上游服务错误。 您可以使用定义于 HttpError 财务报告和审定财务报表 OperationalError数字 :
throw new UpstreamServiceError({
code: 'CONTENT_PIPELINE_FAILED',
message: 'Content could not be fetched, the content pipeline is responding with a 503 status',
statusCode: 503,
relatesToSystems: ['cp-content-pipeline-graphql']
});
UserInputError
这个 UserInputError 类扩展 HttpError 并代表基于无效用户输入的错误,例如,它们将一个错误的电子邮件地址输入到表格中。 它具有操作和HTTP出错的所有特性,但默认为 400 状态代码。 您可以仅用一个消息构建 :
throw new UserInputError('An invalid email address was input');
也可以用数据对象构建用户输入错误。 您可以使用定义于 HttpError 财务报告和审定财务报表 OperationalError数字 :
throw new UserInputError({
code: 'REGISTRATION_INFO_INVALID',
message: 'An invalid email address was input'
});
BaseError
我们的指南开始谈论 操作 vs 程序员出错。这个库中的其他错误提供了操作错误,但它们都扩展了一个名为 BaseError本课提供了一些便利 OperationalError 但标记为非操作性:
const error = new BaseError('This is an error');
error.isOperational === false; // true;
这使得您可以使用库代码中的"可靠性 Kit"出错,在那里丢出操作错误是不合理的. 这个 id, (中文(简体) ), code, (中文(简体) ), message,以及 cause 属性的工作方式与 OperationalError数字 :
throw new BaseError({
message: 'example message',
code: 'EXAMPLE_CODE',
cause: new TypeError('example cause')
});
移动
咨询 移徙指南 如果你想要迁移到这个软件包的后期主要版本.
捐款
见 可靠性工具包中心贡献指南。 。 。 .
许可证
凭 麻省理工学院 执照.
版权:"2022","金融时报"有限公司.