Validate.pipe.ts 852 B

123456789101112131415161718192021222324
  1. import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common'
  2. import { plainToInstance } from 'class-transformer'
  3. import { validate } from 'class-validator'
  4. @Injectable()
  5. export class ValidatePipe implements PipeTransform {
  6. async transform(value: any, metadata: ArgumentMetadata) {
  7. const { metatype } = metadata
  8. //前台提交的表单数据没有类型,使用 plainToClass 转为有类型的对象用于验证
  9. const object = plainToInstance(metatype, value)
  10. //根据 DTO 中的装饰器进行验证
  11. const errors = await validate(object)
  12. if (errors.length) {
  13. let res = errors.map((value) => {
  14. return {
  15. name: value?.property,
  16. msg: Object.values(value.constraints),
  17. }
  18. })
  19. throw new BadRequestException(res)
  20. }
  21. return value
  22. }
  23. }