美文网首页
nestjs中使用小技巧

nestjs中使用小技巧

作者: 请叫我Pro大叔 | 来源:发表于2021-05-11 18:03 被阅读0次

    1.当有多个Query参数时可以定义成对象, ApiQuery的type值设定为该对象类型。例如:

    // xxx.dto.ts
    export class QueryUserDto {
      @ApiProperty({ description: '用户姓名' })
      @IsString()
      @IsOptional()
      name: string
    
      @ApiProperty({ description: 'limit, 默认为20' })
      @Type(() => Number)
      @IsNumber()
      @IsOptional()
      @Min(10)
      @Max(200)
      limit: number
    
      @ApiProperty({ description: 'offset, 默认为0' })
      @Type(() => Number)
      @IsNumber()
      @IsOptional()
      @Min(0)
      offset: number
    }
    
    // xxx.controller.ts
    @ApiQuery({
        type: QueryUserDto
      })
    
    1. 好像Query参数不会自动转类型(我的项目中是这样的,不知道是设定问题还是BUG,需要手动添加Pipe,当Query参数使用Class定义时很不方便)这时我们可以自己定义一个Pipe,使用plainToClass将对象转成对应的类型。
    // parse-query.pipe.ts
    import type { ArgumentMetadata, PipeTransform } from '@nestjs/common'
    import { Injectable } from '@nestjs/common'
    // eslint-disable-next-line @typescript-eslint/consistent-type-imports
    import { ClassConstructor, plainToClass } from 'class-transformer'
    
    @Injectable()
    export class ParseQueryPipe implements PipeTransform<string> {
      async transform(value: any, { metatype }: ArgumentMetadata) {
        const obj = plainToClass(metatype as ClassConstructor<any>, value)
        console.log('metatype ---> ', metatype)
        return obj
      }
    }
    

    使用方法:

    @Query(new ParseQueryPipe()) queryUserDto: QueryUserDto
    
    1. controller返回值统一使用固定的结构时,生成swagger文档可以参考https://docs.nestjs.com/openapi/operations#advanced-generic-apiresponse,使用泛型的方式。
    class BaseResponse<T> {
       data: T
       status: number
        message: string
    }
    

    相关文章

      网友评论

          本文标题:nestjs中使用小技巧

          本文链接:https://www.haomeiwen.com/subject/vcdndltx.html