NestJs - 管道

71 阅读1分钟

管道使用 @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]。