如何在NestJS中将Prisma与ValidationPipe一起使用?

如何在NestJS中将Prisma与ValidationPipe一起使用?,validation,nestjs,prisma,class-validator,prisma2,Validation,Nestjs,Prisma,Class Validator,Prisma2,我试图使用Prisma和NestJS提供的ValidationPipe,但它不起作用,我使用DTO(类)的类验证器包作为ValidationPipes,它工作得很好,现在我需要一种方法来使用Prisma的相同模式,而不需要DTO来避免重复类型。(我希望避免创建用于验证的自定义管道) DTO文件: import { IsNotEmpty } from 'class-validator'; export class TodoCreateDto { @IsNotEmpty() title:

我试图使用Prisma和NestJS提供的ValidationPipe,但它不起作用,我使用DTO(类)的
类验证器
包作为
ValidationPipes
,它工作得很好,现在我需要一种方法来使用Prisma的相同模式,而不需要DTO来避免重复类型。(我希望避免创建用于验证的自定义管道)

DTO文件:

import { IsNotEmpty } from 'class-validator';

export class TodoCreateDto {
  @IsNotEmpty()
  title: string;

  @IsNotEmpty()
  description: string;
}

使用DTO:工作

@Controller('todos')
export class TodosController {
  constructor(private todosService: TodosService) {}

  @Post()
  @UsePipes(ValidationPipe)
  createTodo(@Body() todoCreateDto: TodoCreateDto) {
    return this.todosService.createTodo(todoCreateDto);
  }
}
带PRISMA:不工作

@Controller('todos')
export class TodosController {
  constructor(private todosService: TodosService) {}

  @Post()
  @UsePipes(ValidationPipe)
  createTodo(@Body() todoCreateInput: Prisma.TodoCreateInput) {
    return this.todosService.createTodo(todoCreateInput);
  }
}

默认情况下,Nest的
验证管道通过使用
类验证器
类转换器
以及DTO的类来工作。如果类没有这些库的装饰器,管道将不会为您做任何事情。您需要某种方法来告诉Prisma使用类验证器装饰器生成与SDL相关的类类型,目前我认为这是不可能的。

是的,我知道了,谢谢。我发现它做了一些类似的事情,但我认为它不会工作,因为编辑模式和重新生成类类型将覆盖我对类的验证。