管道使用 @injectable() 装饰器注释的类,他实现了 PipeTransform 接口。
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
@Injectable()
export class ValidationPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
return value;
}
}
冠道有两个使用场景。
- 转型:将数据转到所需要的形式(例如字符串转换到整数)。
- 验证:对输入数据进行验证,如果不通过则抛出异常。
transform 函数参数
value
value 为当前处理方法参数。
@Get()
async findAll(
@Query('page', new ParseOptionalIntPipe(1)) page: number,
) {
}
请求为 req?page=1 , 则 value 为 1。
metadata
metadata 有三个属性。
- type:指示参数是主体
@Body()、查询@Query()、参数@Param()还是自定义参数。在上面的例子中则是 query。 - data:传给装饰器的字符串,在上面的例子中则是 page。
- metadata:参数的元类型。在上面的例子中则是 metatype: [Function: Number]。