返回格式化拦截器
在上一篇《Nest.js权限管理系统开发(四)Swagger API接入》中,我们在base.controller.ts中创建了多个接口,每个接口都有不同的返回类型。现实中我们往往需要统一返回数据的格式,例如:
{
"code": 200,
"msg": "ok",
"data": "This action updates a #admin user"
}
next.js中我们可以通过返回格式拦截器对请求成功(状态码为 2xx)的数据进行一个格式化,同样的先执行
nest g interceptor common/interceptor/transform
创建一个拦截器,按照官网示例给的复制过来
import { CallHandler, ExecutionContext, NestInterceptor, Injectable } from '@nestjs/common'
import { Observable } from 'rxjs'
import { map } from 'rxjs/operators'
import { ResultData } from 'src/common/utils/result'
@Injectable()
export class TransformInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>> {
const req = context.getArgByIndex(1).req
return next.handle().pipe(
map((data) => {
return ResultData.ok(data)
}),
)
}
}
在main.ts
中注册
import { TransformInterceptor } from './common/interceptor/transform/transform.interceptor';
app.useGlobalInterceptors(new TransformInterceptor());
返回异常过滤器
自定义HttpException
这样做之后我们会发现请求成功的 code 只能是 200,一般项目中请求成功还需要很多业务异常状态码返回给前端,所以我们需要新建一个抛出业务异常的类ApiException
我们先创建common/enums/code.enum.ts
用于存放我们的业务状态码,这里简单写几个:
export enum ApiErrorCode {
/** 公共