如何在 NestJS 中将 Prisma 与 ValidationPipe 结合使用?

时间:2021-05-23 00:07:33

标签: validation nestjs prisma class-validator prisma2

我正在尝试将 Prisma 与 NestJS 提供的 ValidationPipe 一起使用,但它不起作用,我使用 class-validator 包与 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);
  }
}

full code repo link

1 个答案:

答案 0 :(得分:1)

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