@adobe/aio-lib-core-errors

中文文档
4.0.1发布于 2024/02/12Apache-2.0CommonJS零依赖近 30 天下载 12.2万

Adobe I/O SDK 核心错误

中文使用文档
文档目录11 节
  1. 安装
  2. 建筑
  3. AioCoreSDKERROR (英语)
  4. 动态错误使用
  5. 静态错误
  6. 1. 通过 ErrorWrapper 创建您的错误类
  7. 2. 使用您的错误分类
  8. 示例控制台输出
  9. 探索
  10. 捐款
  11. 许可证发放

aio-lib-core-errors (英语)

Version Downloads/week Node.js CI License Codecov Coverage

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

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

安装

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

建筑

Adobe I/O Core Error Library Architecture

AioCoreSDKERROR (英语)

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

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

[SDK:ERROR_CODE] ERROR_MESSAGE
  • SDK 是 SDK 名称
  • ERROR_CODE 是错误代码
  • ERROR_MESSAGE 是错误消息

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

动态错误使用

// 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)
  }
}

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

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}`))
        })
    })
  }

改为:

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 创建您的错误类

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

// 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.')

错误类打包器

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

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,可以在构建错误时通过格式描述符的参数。 见下文实例).
class MySDKError extends AioCoreSDKError { ... }

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

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

constructor(parameters)
  • parameters (可选)是一个 object
  • parameters.sdkDetails (可选)是一个 object ,作为 Error 对象的额外数据。 例如API呼叫的函数参数.
  • parameters.messageValues (可选)是一个 string, (中文(简体) ), number, (中文(简体) ), object 或一个 array 如果信件有 格式描述符。 。 。 .

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

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

2. 使用您的错误分类

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

 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 对象的方法,而生成的数据结构不完善,不会扩展嵌入对象:

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

输出 :

 { 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 用于控制台的属性 :

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

输出 :

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

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

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

输出 :

{
    "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 密码

捐款

欢迎捐款! 读取 贡献指南 更多信息.

许可证发放

这个项目根据Apache V2许可证获得许可. 见 自由主义 更多信息.

版本与发布记录

@adobe/aio-lib-core-errors 共发布 11 个版本,首次发布于 2019/09/16;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.0.1latest2024/02/122 年前
4.0.02024/01/102 年前
3.1.1-pre.2024-01-08.6d76060cnext2024/01/082 年前
3.1.12022/08/224 年前
3.1.02022/08/194 年前
3.0.1-pre.2022-06-06.fe3bb36f2022/06/064 年前

关于 @adobe/aio-lib-core-errors 的常见问题

@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 和提交记录判断。