# @adobe/aio-lib-core-errors 中文文档

规范地址：https://npmcn.com/package/%40adobe/aio-lib-core-errors/

版本：4\.0\.1
npm 元数据更新时间：2026-10-01T01:32:24.770Z
中文译文更新时间：2026-11-05T17:56:25.085Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40adobe/aio-lib-core-errors
原文对照：https://npmcn.com/package/%40adobe/aio-lib-core-errors/?lang=original
项目主页：https://github.com/adobe/aio-lib-core-errors#readme
源码仓库：https://github.com/adobe/aio-lib-core-errors

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：29.9 kB，6 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2019-09-16T02:48:09.420Z
- 最新版本发布：2024-02-12T05:47:15.228Z
- 近 30 天下载量：122198（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：11（近 12 个月 0 个）

## 中文简介

Adobe I/O SDK 核心错误

## 安装

```sh
npm install @adobe/aio-lib-core-errors
```

也可以使用：`pnpm add @adobe/aio-lib-core-errors`、`yarn add @adobe/aio-lib-core-errors`、`bun add @adobe/aio-lib-core-errors`

## README

# aio-lib-core-errors (英语)

[![Version](https://img.shields.io/npm/v/@adobe/aio-lib-core-errors.svg)](https://npmjs.org/package/@adobe/aio-lib-core-errors) [![Downloads/week](https://img.shields.io/npm/dw/@adobe/aio-lib-core-errors.svg)](https://npmjs.org/package/@adobe/aio-lib-core-errors) [![Node.js CI](https://github.com/adobe/aio-lib-core-errors/actions/workflows/node.js.yml/badge.svg)](https://github.com/adobe/aio-lib-core-errors/actions/workflows/node.js.yml) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Codecov Coverage](https://img.shields.io/codecov/c/github/adobe/aio-lib-core-errors/master.svg?style=flat-square)](https://codecov.io/gh/adobe/aio-lib-core-errors/)

这包含了所有 Adobe I/O Core Errors 的基础类. 将此作为所有 SDK 错误的错误类子类 .

这个模块的灵感来自Node.js如何创建自己的错误类.

## 安装

`npm install @adobe/aio-lib-core-errors`

## 建筑

[![Adobe I/O Core Error Library Architecture](https://npmcn.com/package/%40adobe/aio-lib-core-errors/media/architecture.png)](https://npmcn.com/package/%40adobe/aio-lib-core-errors/media/architecture.png)

## AioCoreSDKERROR (英语)

这是所有错误类的基类,不应该直接被即时化. 创建自己的子类( 动态用法) 或使用以下的 ErrorWrapper( 静态用法) .

这个 `message` 财产 `AioCoreSDKError` 输出此格式中的错误 :

```bash
[SDK:ERROR_CODE] ERROR_MESSAGE
```

-   `SDK` 是 SDK 名称
-   `ERROR_CODE` 是错误代码
-   `ERROR_MESSAGE` 是错误消息

注意 `sdk details` 未在信件中显示。 看见任何 `sdk details`中,您需要通过 `.toJSON()` (单位:千美元)`JSON.stringify` 也会通过引用来转换错误对象 `.toJSON()` 在错误对象上)

## 动态错误使用

```javascript
// Adobe I/O Campaign Standard Wrapper

const { AioCoreSDKError } = require('@adobe/aio-lib-errors')

const gSDKDetails = {
  // ... add your sdk details here
  tenantId,
  endpoint
}
const gSDKName = "AdobeIOCampaignStandard"

export default class CampaignStandardCoreAPIError extends AioCoreSDKError {
  constructor(message, code) {
    // the sdk name and sdk details are curried in as the 3rd and 4th parameters
    super(message, code, gSDKName, gSDKDetails)
  }
}
```

因此,如果我们有这种包装功能,我们改变如下:

```javascript
function getAllProfiles (parameters) {
    return new Promise((resolve, reject) => {
      const apiFunc = 'getAllProfiles'
      this.sdk.apis.profile[apiFunc]()
        .then(response => {
          resolve(response)
        })
        .catch(err => {
          debug(err)
          // >>>>>TO CHANGE<<<<<<<<<
          reject(new Error(`${apiFunc} ${err}`))
        })
    })
  }
```

改为:

```javascript
function getAllProfiles (parameters) {
    return new Promise((resolve, reject) => {
      const apiFunc = 'getAllProfiles'
      this.sdk.apis.profile[apiFunc]()
        .then(response => {
          resolve(response)
        })
        .catch(err => {
          debug(err)
          // >>>>>NEW<<<<<<<<<
          reject(new CampaignStandardCoreAPIError(err.message /* error message */, apiFunc /* error code */))
        })
    })
}
```

如你所见,这不太直观,可能容易出错。 静态出错,我们可以做得更好(见下文).

## 静态错误

上面的例子使用是针对动态错误的,例如我们正在包起来的API错误. 静态错误要好得多:它们更能直观地使用,对代码可读性更好.

### 1\. 通过 ErrorWrapper 创建您的错误类

我们定义我们的专业错误类, 错误代码在自己的模块中是这样的:

```javascript
// SDKErrors.js
const { ErrorWrapper, createUpdater } = require('@adobe/aio-lib-core-errors').AioCoreSDKErrorWrapper

const codes = {}
const messages = new Map()

/**
 * Create an Updater for the Error wrapper
 */
const Updater = createUpdater(
  // object that stores the error classes (to be exported)
  codes,
  // Map that stores the error strings (to be exported)
  messages
)

/**
 * Provides a wrapper to easily create classes of a certain name, and values
 */
const E = ErrorWrapper(
  // The class name for your SDK Error. Your Error objects will be these objects
  'MySDKError',
  // The name of your SDK. This will be a property in your Error objects
  'MySDK',
  // the object returned from the CreateUpdater call above
  Updater
  // the base class that your Error class is extending. AioCoreSDKError is the default
  /* , AioCoreSDKError */
)

module.exports = {
  codes,
  messages
}

// Define your error codes with the wrapper
E('UNKNOWN_THING_ID', 'There was a problem with that thing')
E('UNKNOWN_ORDER_ID', 'There was a problem with that order id: %s.')
```

#### 错误类打包器

让我们来解释一下这条线的意思:

```javascript
E('UNKNOWN_ORDER_ID', 'There was a problem with that order id: %s.')
```

这将动态地创建一个 `MySDKError` 分类,对数值有适当的关闭:

-   sdk 名称 (`MySDK`,转到上面的 ErrorWrapper 构造器)
-   sdk 错误类名称 (`MySDKError`,转到上面的 ErrorWrapper 构造器)
-   错误代码( e)`UNKNOWN_ORDER_ID`,第一个参数传递到 `E`(中文(简体) )
-   错误消息( e)`There was a problem with that order id: %s.`,第二个参数传递到 `E`如果此字符串与 `format specifiers`,可以在构建错误时通过格式描述符的参数。 见下文实例).

```javascript
class MySDKError extends AioCoreSDKError { ... }
```

该行将添加动态创建 `MySDKError` 分类到导出 `codes` 对象,以包装符的第一个参数(错误代码)为键.

这个 `constructor` 对于创建的类,需要一个参数,一个对象:

```javascript
constructor(parameters)
```

-   `parameters` (可选)是一个 `object`
-   `parameters.sdkDetails` (可选)是一个 `object` ,作为 Error 对象的额外数据。 例如API呼叫的函数参数.
-   `parameters.messageValues` (可选)是一个 `string`, (中文(简体) ), `number`, (中文(简体) ), `object` 或一个 `array` 如果信件有 [格式描述符](https://nodejs.org/api/util.html#util_util_format_format_args)。 。 。 .

在下面的错误规格行中,可以看到它有一个格式的指定符 `%s`数字 :

```javascript
E('UNKNOWN_ORDER_ID', 'There was a problem with that order id: %s.')
```

### 2\. 使用您的错误分类

导入静态错误代码出错类, 并直接使用 .

```javascript
 const { UNKNOWN_THING_ID, UNKNOWN_ORDER_ID } = require('./SDKErrors').codes
// or, if you have too many codes to destructure:
// const { codes } = require('./SDKErrors')

const gSdkDetails = {
  tenantId: 'mytenant'
}
// convoluted examples, but demonstrates usage
const unknownThing = true
if (unknownThing) {
  throw new UNKNOWN_THING_ID({ sdkDetails: gSDKDetails })
}

const unknownOrderId = true
if (unknownOrderId) {
  // messageValues can either be a string, object, etc or an array of them
  throw new UNKNOWN_ORDER_ID({ 
    sdkDetails: gSDKDetails,
    messageValues: ['ORDER-2125SFG']
  }) ) 
}

function getOrder(orderId) {
  // we just wrap the function arguments as the sdkDetails
  const sdkDetails = { orderId }
  const somethingWentWrong = true

  if (somethingWentWrong) {
  // messageValues can either be a string, object, etc or an array of them
    throw new UNKNOWN_ORDER_ID({ 
      sdkDetails: sDKDetails,
      messageValues: 'ORDER-2125SFGF'
    }) ) 
  }
}

getOrder('abc123')
```

## 示例控制台输出

* * *

打印出一个抛出 `UNKNOWN_ORDER_ID` 向控制台出错 . `console` 呼唤 `.toString()` 用于 Error 对象的方法,而生成的数据结构不完善,不会扩展嵌入对象:

```javascript
try {
  throw new UNKNOWN_ORDER_ID()
} catch (e) {
  console.error(e)
}
```

输出 :

```bash
 { MySDKError: [MySDK:UNKNOWN_ORDER_ID] There was a problem with that order id: ORDER-21241-FSFS.
          at new <anonymous> (/Users/obfuscated/aio-lib-core-errors/src/AioCoreSDKErrorWrapper.js:22:9)
          at Object.<anonymous>.test (/Users/obfuscated/aio-lib-core-errors/test/MySDKError.test.js:50:15)
          at Object.asyncJestTest (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:102:37)
          at resolve (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/queueRunner.js:43:12)
          at new Promise (<anonymous>)
          at mapper (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/queueRunner.js:26:19)
          at promise.then (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/queueRunner.js:73:41)
          at process._tickCallback (internal/process/next_tick.js:68:7)
        code: 'UNKNOWN_ORDER_ID',
        sdk: 'MySDK',
        sdkDetails: { tenantId: 'MYTENANT2' },
        name: 'MySDKError' }
```

* * *

只需打印出一个掷出 `UNKNOWN_ORDER_ID` 错误对象 `message` 用于控制台的属性 :

```javascript
try {
  throw new UNKNOWN_ORDER_ID()
} catch (e) {
  console.error(e.message)
}
```

输出 :

```bash
[MySDK:UNKNOWN_ORDER_ID] There was a problem with that order id: ORDER-21241-FSFS.
```

* * *

转换抛出 `UNKNOWN_ORDER_ID` 错误对象为JSON并打印到控制台. `console` 呼唤 `.toJSON()` 方法,并将扩展嵌入对象:

```javascript
try {
  throw new UNKNOWN_ORDER_ID()
} catch (e) {
  console.error(JSON.stringify(e, null, 2))
}
```

输出 :

```json
{
    "sdk": "MySDK",
    "sdkDetails": { "tenantId": "MYTENANT2" },
    "code": "UNKNOWN_ORDER_ID",
    "message": "[MySDK:UNKNOWN_ORDER_ID] There was a problem with that order id: ORDER-21241-FSFS.",
    "stacktrace": "MySDKError: [MySDK:UNKNOWN_ORDER_ID] There was a problem with that order id: ORDER-21241-FSFS.\n    at new <anonymous> (/Users/obfuscated/aio-lib-core-errors/src/AioCoreSDKErrorWrapper.js:22:9)\n    at Object.<anonymous>.test (/Users/obfuscated/aio-lib-core-errors/test/MySDKError.test.js:50:15)\n    at Object.asyncJestTest (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:102:37)\n    at resolve (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/queueRunner.js:43:12)\n    at new Promise (<anonymous>)\n    at mapper (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/queueRunner.js:26:19)\n    at promise.then (/Users/obfuscated/aio-lib-core-errors/node_modules/jest-jasmine2/build/queueRunner.js:73:41)\n    at process._tickCallback (internal/process/next_tick.js:68:7)"
}
```

## 探索

`goto` [API 密码](https://npmcn.com/package/%40adobe/aio-lib-core-errors/doc/api.md)

## 捐款

欢迎捐款! 读取 [贡献指南](https://npmcn.com/package/%40adobe/aio-lib-core-errors/.github/CONTRIBUTING.md) 更多信息.

## 许可证发放

这个项目根据Apache V2许可证获得许可. 见 [自由主义](https://npmcn.com/package/%40adobe/aio-lib-core-errors/LICENSE) 更多信息.

## 常见问题

### @adobe/aio-lib-core-errors 是什么？

Adobe I/O SDK 核心错误

### 如何安装 @adobe/aio-lib-core-errors？

在项目目录运行 npm install @adobe/aio-lib-core-errors，或使用 pnpm add / yarn add / bun add。

### @adobe/aio-lib-core-errors 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/adobe\_\_aio-lib-core-errors 是否存在。

### @adobe/aio-lib-core-errors 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @adobe/aio-lib-core-errors 可以商用吗？

@adobe/aio-lib-core-errors 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @adobe/aio-lib-core-errors 的下载量有多少？

根据 npm 官方下载统计，@adobe/aio-lib-core-errors 在 2026/10/05 – 2026/11/03 这 30 天内被下载 122,198 次，日均约 4,073 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @adobe/aio-lib-core-errors 还在维护吗？

最新版本 4\.0\.1 发布于 2024/02/12（2 年前）；至今共发布 11 个版本，其中过去 12 个月发布了 0 个；首次发布于 2019/09/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

