Validate.pipe.ts 884 B

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