上篇文章介绍了如何使用class-validator验证数据,接下来我们接着聊class-transformer的使用。 class-transformer直接翻译的意思就是类的转换,其实这里转换的不是类,而是对象,目的是将字面量对象转化为相应的类生成的对象,然后就可以使用class-validator验证了。 class-transformer本质上实现字面量对象plain object和类实例对象instance of class之间的转换,看如下代码:首先我们来区分一下plain(literal) object => { const realUsers = plainToClass(Use, user); // now user is an instance of User class });以上便是class-transformer
前面两篇文章分别介绍了class-validator和class-transformer的使用,接着聊一下如何在nestjs中使用这两个包。 首先我们安装两个需要的依赖包:class-transformer和class-validator。 npm install class-validator class-transformer -S然后在xxxx.dto.ts文件中添加验证, 完善错误信息提示:import { IsNotEmpty, 函数进行验证,validate 函数同时会对 dto 实例进行相应处理(比如,设置了 whitelist, 会删除没有被 class-Validator 装饰器装饰的属性) 将这个 dto 实例再次通过 class-transformer 以上便是nestjs中如何使用class-validator和class-transformer,希望对你有所帮助。
); log("JSON转对象后输出情况"); //输出class中的方法 log(user.getName()); log(user.isAdult() + "");}实现效果:在项目中使用class-transformer 例子上面已经说明了class-transformer的最简单用法,现在说一个示例如何在项目中使用。 '/user')findUser() { const user = new User('coder', '12345', 18); return user;}可以发现立马就报错了:所以我们需要使用class-transformer 总结使用三方库class-transformer搭配JSON的JSON.parse,可以满足类似gson/fastjson绝大部分的需求,更多用法可以参考 https://github.com/typestack /class-transformer 文档。
实现过程中使用了第三方插件class-transformer,传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法,效果图预览使用说明从首页进入本页面时,会传递一个类对象UserBookingInfo 实现思路在oh-package.json5中添加第三方插件class-transformer的依赖 "dependencies": { "class-transformer": "^0.5.1 " }在使用第三方插件class-transformer的页面导入class-transformer库。 import { plainToClass } from "class-transformer";定义要传递的类 // 定义一个用户类 export class UserBookingInfo / 转化成普通对象 let userBookingTmp: UserBookingInfo = JSON.parse(bookingString); // TODO:知识点:通过调用第三方插件class-transformer
此时我们需要另外一个库class-transformer。class-transformer这个库的作用就是将对象转化为类对象,在转化过程中可以做一些过滤约束等等操作。 我们下片文章来讲解class-transformer的使用。
其实官方教程写的挺好了, 局部管道和全局管道都写到了, 这里我们以更具通用性的入参全局管道做例子, 尽量写的更贴近业务和更为粗俗的解释吧~ 安装 # class-validator: 提供非常丰富的类型装饰器 # class-transformer : 可以把常规数据快速转成类~ # https://www.npmjs.com/package/class-validator # https://www.npmjs.com/package/class-transformer yarn add class-validator class-transformer 封装入参拦截管道 Usage: nest <command> [options] Options: -v, PipeTransform, } from '@nestjs/common'; // plainToClass 会把一个普通的js对象转换成指定类的实例 import { plainToClass } from 'class-transformer
node_modules/@nestjs/mapped-types/dist/type-helpers.utils.js 69:27-63 Module not found: Error: Can't resolve 'class-transformer 经过一番查找后,在mapped-types仓库的Issues[6]中找到了答案,需要在webpack.config.js中的lazyImports中加入class-transformer/storage nestjs/websockets/socket-module", "cache-manager", "class-validator", "class-transformer ", "class-transformer/storage" ]; }) } ❝完整代码请移步:webpack.config.js[7] 部署时遇到的问题
import { Exclude } from 'class-transformer'; export class UserEntity { id: number; firstName: string import { Exclude } from 'class-transformer'; export class UserEntity { id: number; firstName: string
则使用默认值替换它 ParseFilePipe:用于处理上传的文件,它可以验证文件的类型、大小等,确保上传的文件符合预期 自定义管道 1、 安装依赖 pnpm add class-validator class-transformer BadRequestException, Injectable, PipeTransform } from '@nestjs/common'; import { plainToClass } from 'class-transformer
import { Exclude } from 'class-transformer'; export class UserEntity { id: number; firstName: string import { Exclude } from 'class-transformer'; export class UserEntity { id: number; firstName: string
简单介绍完一些概念后,开始实战,先创建 pipe 文件: $ nest g pipe validation pipe 这里我们还需要安装两个依赖包: $ yarn add class-validator class-transformer BadRequestException } from'@nestjs/common'; import { validate } from'class-validator'; import { plainToClass } from'class-transformer
简单介绍完一些概念后,开始实战,先创建 pipe 文件: $ nest g pipe validation pipe 这里我们还需要安装两个依赖包: $ yarn add class-validator class-transformer } from '@nestjs/common'; import { validate } from 'class-validator'; import { plainToClass } from 'class-transformer
可以参考这篇文章:TypeScript 中的元数据以及 reflect-metadata 实现原理分析[1] 在实际使用中, 我们早前用的是 class-transformer 这个库, 之前我对这个库的评价应该是非常高的 : “如果没有 class-transformer 这个库, TypeScript 狗都不写。”
} from '@nestjs/common'; import { validate } from 'class-validator'; import { plainToClass } from 'class-transformer Validation failed'); } return value; } } 因为我们是用装饰器做的配置,那就要通过对象拿到它对应的类的装饰器,所以在 validate 之前要调用 class-transformer
首先执行 npm i --save class-validator class-transformer 安装必要的模块,接着为 CreateUserDto 增加验证相关的装饰器。 from '@nestjs/common'; import { validate } from 'class-validator'; import { plainToInstance } from 'class-transformer
": $jsonValue") } return "{${jsonFields.joinToString(", ")}}" }}前端对比:// 类似 class-transformer 的序列化import { plainToClass, classToPlain } from 'class-transformer';const userForm = new UserForm();const
createCatDto: CreateCatDto) { this.catsService.create(createCatDto); } 复制代码 数据验证 得益于 class-validator 与 class-transformer
提供文档协同编辑的 WebSocket 服务与 CRDT 算法实现 数据库 ORM Prisma 类型安全的数据库访问工具,自动生成 Schema、支持迁移与种子数据 数据验证 class-validator, class-transformer
nestjs/websockets/socket-module", "cache-manager", "class-validator", "class-transformer
在class-transformer这个库中,提供了Transform方法,它接受一个回调函数作为参数,回调函数中提供了一个TransformFnParams类型的参数,其中的value字段就是客户端传过来的参数