在 Nestjs 中使用验证管道给我一个 classTransformer.plainToclass is not a function 错误

Inu*_*ung 4 graphql class-validator nestjs class-transformer

我正在使用nestjs/graphql, 并且为 graphql 突变创建了一个 dto,其中我使用了@IsString()和等类验证器选项@IsBoolean()。为此我安装了class-validatorclass-transformer. 但是当我进行突变时,它给了我一个闻所未闻的错误。我用谷歌搜索了它,但没有结果。\n错误是这样的:

\n
[Nest] 5872  - 2021. 11. 21. \xec\x98\xa4\xed\x9b\x84 7:56:09   ERROR [ExceptionsHandler] classTransformer.plainToClass is not a function\nTypeError: classTransformer.plainToClass is not a function\n    at ValidationPipe.transform (/home/inust33/ubereats-backend/node_modules/@nestjs/common/pipes/validation.pipe.js:51:39)\n    at /home/inust33/ubereats-backend/node_modules/@nestjs/core/pipes/pipes-consumer.js:16:33\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)\n
Run Code Online (Sandbox Code Playgroud)\n

在操场上,它向我显示如下:\n graphql 操场错误

\n

我的 dto 看起来像这样:

\n
@ArgsType()\nexport class createRestaurantDto {\n  @Field((type) => String)\n  @IsString()\n  @Length(5, 10)\n  name: string;\n\n  @Field((type) => Boolean)\n  @IsBoolean()\n  isVegan: boolean;\n\n  @Field((type) => String)\n  @IsString()\n  address: string;\n\n  @Field((type) => String)\n  @IsString()\n  ownersName: string;\n\n  @Field(() => String)\n  @IsString()\n  categoryName: string;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我使用这个 dto 的突变是这样的:

\n
 @Mutation(() => Boolean)\n  async createRestaurant(\n    @Args() createRestaurantDto: createRestaurantDto,\n  ): Promise<boolean> {\n    try {\n      await this.restaurantService.createRestaurant(createRestaurantDto);\n      return true;\n    } catch (e) {\n      console.log(e);\n      return false;\n    }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

我在 main.ts 中进行了验证管道设置,如下所示:

\n
async function bootstrap() {\n  const app = await NestFactory.create(AppModule);\n  app.useGlobalPipes(new ValidationPipe());\n  await app.listen(3000);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我所能得到的就是不设置useGlobalPipes选项,这不是我想要在这里做的,突变效果很好。\n你能帮我解决这个问题吗?

\n

Inu*_*ung 11

问题解决了。由于最近的更新,class-transformer@0.5.0在nestJS的validationPipe中使用时会出错。

你应该降级到 class-transformer@0.4.0

https://github.com/nestjs/nest/issues/8637