NestJS搭配GraphQL使用ValidationPipe报plainToClass不是函数错误
这个错误是@nestjs/common版本与class-transformer版本不兼容导致的。class-transformer从v0.5.x版本开始,废弃并移除了旧的plainToClass方法,替换为plainToInstance方法,但低版本的@nestjs/common内置的ValidationPipe仍然在调用已被删除的plainToClass方法,因此触发该报错。
解决方案
方案1:降级class-transformer到兼容版本
直接安装v0.4.x版本的class-transformer即可适配当前的NestJS版本:
# npm 安装 npm install class-transformer@0.4.0 # yarn 安装 yarn add class-transformer@0.4.0
安装完成后重启项目,ValidationPipe即可正常使用。
方案2:升级NestJS相关依赖到最新版本
如果不想降级第三方依赖,可以将所有NestJS核心依赖升级到最新版本,新版本的NestJS已经适配了class-transformer v0.5.x+的新API:
# npm 升级 npm update @nestjs/common @nestjs/core @nestjs/graphql # yarn 升级 yarn upgrade @nestjs/common @nestjs/core @nestjs/graphql
升级完成后重启项目即可解决问题。
额外建议
你的DTO类名createRestaurantDto建议调整为大驼峰格式CreateRestaurantDto,符合TypeScript类命名的通用规范,避免后续出现不必要的问题。
内容的提问来源于stack exchange,提问作者Inu Jung
相关产品推荐
相关产品推荐

