自定义错误
在 Node.js 中,每个异常都是内置的 Error 类型的实例。
通过扩展标准 Error,Midway 提供了内置的错误类型,额外增加了一些属性。
export class MidwayError extends Error {
// ...
}
现阶段,所有 Midway 框架提供的错误,都是该错误类抛出的实例。
MidwayError 包括几个属性:
- name 错误的名字,比如 Error,TypeError 等,在自定义错误中,为自定义错误的类名
- message 错误的消息
- stack 错误的堆栈
- code 自定义错误码
- cause 错误的来源
我们可以通过简单的实例化并且抛出来使用,比如:
import { MidwayError } from '@midwayjs/core';
// ...
async findAll() {
throw new MidwayError('my custom error');
}
也可以在业务中自定义一些错误。
常见的,我们会把异常统一定义到 error 目录中。
➜ my_midway_app tree
.
├── src
│ └── error
│ ├── customA.error.ts
│ └── customB.error.ts
├── test
├── package.json
└── tsconfig.json
如果业务有一些复用的异常,比如固定的错误
// src/error/custom.error.ts
import { MidwayError } from '@midwayjs/core';
export class CustomError extends MidwayError {
constructor() {
super('my custom error', 'CUSTOM_ERROR_CODE_10000');
}
}
然后在业务中抛出使用。
import { CustomError } from './error/custom.error';
// ...
async findAll() {
throw new CustomError();
}
上面的 CUSTOM_ERROR_CODE_10000
为错误的错误码,一般我们会为不同的错误分配不同的错误码和错误消息,以方便排查问题。