首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

javascript/typescript | class-validator |自定义验证修饰符|重写`validator`方法中的`validationOptions`

基础概念

class-validator 是一个用于 TypeScript 的库,它允许你在类属性上添加验证装饰器,以便在运行时检查这些属性的有效性。这对于构建健壮的 API 和确保数据完整性非常有用。

自定义验证修饰符允许你创建自己的验证逻辑,以满足特定的业务需求。通过重写 validator 方法中的 validationOptions,你可以进一步定制验证行为。

相关优势

  1. 类型安全:由于 class-validator 与 TypeScript 紧密集成,它可以在编译时捕获许多类型错误。
  2. 可重用性:自定义验证修饰符可以在多个类中重复使用,提高了代码的可维护性和可重用性。
  3. 灵活性:通过重写 validator 方法中的 validationOptions,你可以实现高度定制化的验证逻辑。

类型

class-validator 提供了多种内置验证装饰器,如 @IsString@IsInt@IsEmail 等。此外,你还可以创建自定义验证装饰器。

应用场景

  1. API 输入验证:在处理 HTTP 请求时,验证传入的数据是否符合预期格式。
  2. 数据持久化:在将数据保存到数据库之前,确保数据的有效性。
  3. 业务逻辑验证:在执行特定业务逻辑之前,验证输入参数是否满足条件。

示例代码

假设我们需要创建一个自定义验证修饰符,用于检查字符串是否包含特定子字符串:

代码语言:txt
复制
import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';

export function ContainsSubstring(substring: string, validationOptions?: ValidationOptions) {
  return function (object: Object, propertyName: string) {
    registerDecorator({
      name: 'containsSubstring',
      target: object.constructor,
      propertyName: propertyName,
      constraints: [],
      options: validationOptions,
      validator: {
        validate(value: any, args: ValidationArguments): boolean {
          if (typeof value !== 'string') {
            return false;
          }
          return value.includes(substring);
        },
      },
    });
  };
}

然后,我们可以在类属性上使用这个自定义验证修饰符:

代码语言:txt
复制
import { IsString } from 'class-validator';
import { ContainsSubstring } from './contains-substring.decorator';

class User {
  @IsString()
  @ContainsSubstring('admin')
  username: string;
}

参考链接

解决常见问题

如果你在使用 class-validator 时遇到问题,例如自定义验证修饰符不起作用,可以检查以下几点:

  1. 确保装饰器正确注册:检查自定义装饰器是否正确注册到 registerDecorator 中。
  2. 验证顺序:确保在类属性上正确应用了所有装饰器,并且顺序正确。
  3. 错误处理:确保在验证失败时正确处理错误,并返回适当的错误信息。

通过这些步骤,你应该能够解决大多数与 class-validator 相关的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实现nest自定义注解

前言 Nest 与 class-validator[1] 配合得很好,它允许我们使用基于装饰器验证,在dto层我们可以通过它一些内置注解完成对参数一些常用校验。...我们在阅读class-validator仓库文档custom-validation-decorators[3]章节后,大概了解了它流程,接下来我们来实践它。...我们通过registerDecorator方法来注册一个装饰器,代码如下所示: IsConfig 为注解名称,它是函数类型,接受一个ValidationOptions类型可选参数 装饰器注册函数中有一个...validator属性,用于校验数据,将在下个章节进行详细讲解 // 配置验证注解 export function IsConfig(validationOptions?...,它作用就是为了其能像内置注解一样,修改其公开属性,例如message,我们可以对验证失败时错误信息进行自定义

65720

Nest.js 实战系列四:使用管道、DTO 验证入参,摆脱 if-else 恐惧

使用 DTO 可以清晰了解对象结构,使用 Pipes(管道)配合 class-validator 还可以对参数类型进行判断,还可以在验证失败时候抛出错误信息。...: string | number; } 上面简单编写了一些常用验证手段,class-validator 里面有非常多验证方法,有兴趣读者可以访问官方文档去学习:GitHub: class-validator...上图可以看到 accountName @IsNotEmpty() 已经生效了 注意:class-validator 还提供了一个方法叫 @IsEmpty(),这是表示参数必须为空,不要搞混了。...总结 本篇介绍了如何定义 DTO,如何使用 Pipes 管道,以及如何配合 class-validator 进行入参验证。...但如果不拥抱 TypeScript 特性,那还不如直接用 JavaScript 来写,这样还更快(如 Koa、Egg等),定义 DTO 还有一个好处,那就是可以配合 Swagger 自动生成文档,并且是可请求

3.8K20
  • Nest.js 从零到壹系列(五):使用管道、DTO 验证入参,摆脱 if-else 恐惧

    使用 DTO 可以清晰了解对象结构,使用 Pipes(管道)配合 class-validator 还可以对参数类型进行判断,还可以在验证失败时候抛出错误信息。...: string | number; } 上面简单编写了一些常用验证手段,class-validator 里面有非常多验证方法,有兴趣读者可以访问官方文档去学习:GitHub: class-validator...上图可以看到 accountName @IsNotEmpty() 已经生效了 注意:class-validator 还提供了一个方法叫 @IsEmpty(),这是表示参数必须为空,不要搞混了。...总结 本篇介绍了如何定义 DTO,如何使用 Pipes 管道,以及如何配合 class-validator 进行入参验证。...但如果不拥抱 TypeScript 特性,那还不如直接用 JavaScript 来写,这样还更快(如 Koa、Egg等),定义 DTO 还有一个好处,那就是可以配合 Swagger 自动生成文档,并且是可请求

    4K41

    class-validator使用

    在使用nestjs开发应用时,我们一般需要对前端提交数据进行验证,此时就需要用到class-validator这个库了。...console.log('验证失败:', errors); } else { console.log('验证通过'); }});1、首先导入了class-validator一些常用装饰器...4、用validate方法验证上一步对象,validate会根据对象找到生成此对象类,然后根据类属性修饰符,对对象相应属性进行验证,并输出结果。...到此为止,我们了解了class-validator基本使用。但是这里我们产生了一个疑问?...此时我们需要将字面量对象转化为类对象,并且是class-validator修饰符修饰过对象,怎么办呢?此时我们需要另外一个库class-transformer。

    27510

    nestjs如何使用class-validator和class-transformer

    管道验证操作通常用在dto这种传输层文件,用作验证操作。首先我们安装两个需要依赖包:class-transformer和class-validator。...npm install class-validator class-transformer -S然后在xxxx.dto.ts文件添加验证, 完善错误信息提示:import { IsNotEmpty,...将得到这个 dto 实例通过 class-validator validate 函数进行验证,validate 函数同时会对 dto 实例进行相应处理(比如,设置了 whitelist, 会删除没有被...方法收到相应参数 当然了,这是nestjs借助了ValidationPipe使用class-validator和calss-transformer,我们也可以自定义pipe来使用这两个包。...以上便是nestjs如何使用class-validator和class-transformer,希望对你有所帮助。

    77010

    Nest.js 实战 (四):利用 Pipe 管道实现数据验证和转换

    在 Nest.js ,管道(Pipelines) 是一种强大功能,用于预处理进入控制器方法请求数据,如请求体、查询参数、路径参数等。...例如,使用 ValidationPipe 结合 class-validator,可以自动验证请求体或查询参数是否满足特定 DTO(数据传输对象)定义,从而预防因数据格式错误引起运行时异常错误处理:如果数据不符合管道规则...,管道可以抛出异常,从而阻止请求进一步处理,并向客户端返回适当错误信息一致性:管道有助于在整个应用中保持一致性,避免在不同控制器或方法重复相同预处理逻辑可插拔性和重用性:管道是可插拔组件,可以很容易地在多个控制器或方法之间共享和重用内置管道...它使用 class-validator 库来检查数据是否符合定义在 DTOs 或请求模型上验证规则ParseIntPipe:将字符串类型参数转换为整数ParseFloatPipe:将字符串类型参数转换为浮点数...、大小等,确保上传文件符合预期自定义管道 1、 安装依赖 pnpm add class-validator class-transformer 2、 新建 /pipe/validation.pipe.ts

    14010

    快速打开 Nestjs 世界

    它使用渐进式JavaScript,使用TypeScript构建并完全支持TypeScript(但仍然允许开发人员使用纯JavaScript编码),并结合了OOP(面向对象编程)、FP(功能编程)和FRP...,通过重写catch()实现具体拦截处理。...catch()方法参数,exception参数是当前正在处理异常对象。...; metatype:提供参数元类型; 基于对象模式验证 下面是创建新 Cat 数据create处理函数,在穿如若服务层之前仍然缺少验证 cat 数据完整且有效步骤,在遵守单一责任原则就可以通过自定义验证管道方法做来...同样还是先来执行命令npm i --save class-validator class-transformer安装必要模块后将 Cat 接口改为 Cat 类: export class Cat {

    47910

    NestJs 管道(Pipe)

    管道(Pipe)作用 管道(Pipe)作用在每个控制器处理方法上,也就是当每一个请求被路由到具体控制器方法后会先通过管道(Pipe)对传入请求参数进行 转换 和 验证,保证数据在被正式处理前是完全合法...在 createUser 处理函数要求客户端传递一份包含 name、age 和 gender 数据,对于这种复杂数据结构来说可以引入 schema (前端表单校验常用技术)来配合自定义管道实现。...首先执行 npm i --save class-validator class-transformer 安装必要模块,接着为 CreateUserDto 增加验证相关装饰器。...定义私有函数 toValidation,跳过非DTO类型(非Javascript原类型)。 使用 plainToInstance 将元类型和请求体参数转为可验证类型对象。...ValidationPipe 管道可以完全支持上述两种验证方式,我们不必为自定义验证管道花费时间。

    32220

    TypeGraphQL尝试

    构建 初始化工程 egg.js 对 TypeScript 现在已经有了比较好支持 (参考),下面我们先创建一个基于 TypeScript egg.js 工程。...Resolver(of => Recipe) 返回对象添加一个字段处理 方法参数: @Root:获取当前查询对象 @Ctx:获取当前上下文,这里可以拿到 egg Context (见上面中间件集成处理...authorizedField: string; @Authorized("ADMIN") @Field() adminField: string; } Validation TypeGraphQL 默认集成了 class-validator...import { MaxLength, Length } from "class-validator"; @InputType() export class RecipeInput { @Field...我们在正式使用目前也没有遇到大问题,该项目目前也比较活跃,很多新特性也在开发,建议可以做一些尝试。

    2.2K10

    学完这篇 Nest.js 实战,还没入门来锤我!(长文预警)

    它利用JavaScript 渐进增强能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和...首先我们安装两个需要依赖包:class-transformer和class-validator npm install class-validator class-transformer -S 然后在...create-post.dto.ts文件添加验证, 完善错误信息提示: import { IsNotEmpty, IsNumber, IsString } from 'class-validator'...,上面只编写了一些常用验证class-validator还提供了很多验证方法, 大家感兴趣可以自己看官方文档....,不带author参数, 返回数据有很清晰了: 通过上边学习,可以知道DTO本身是不存在任何验证功能, 但是我们可以借助class-validator来让DTO可以验证数据 总结 至此我们Nest.js

    13.4K54

    从零开始 Nest.js

    路由 nest 路由是位于一个被Controller装饰,每个路由是该类一个方法,该方法被Get``Post等装饰器装饰,而返回值则是响应对象。...请求过滤 nest 同样提供了强大了请求过滤,你可以使用之前为 swagger 准备 Dto 模型,在此基础上加以扩展,即可对请求体模型进行验证验证通过 nest 管道(Pipe)。...首先安装 class-validator,之后 main.ts 引入全局管道 ValidationPipe,ValidationPipe是 nest 提供一个类似于Joi之类 Schema 验证器...,他通过调用 class-validator来识别该属性是否正确或者需要,已阻止不必要 nosql 注入。...user.dto.ts 2import { ApiProperty } from '@nestjs/swagger' 3import { 4 IsString, 5 IsNotEmpty, 6} from 'class-validator

    1.6K20

    使用NestJS搭建服务端应用

    /core": "^8.1.1", "@nestjs/platform-express": "^8.1.1", "class-transformer": "^0.5.1", "class-validator...image-20220114230042606 验证控制层创建控制器 接下来,我们来验证下前面在AppController.ts两个方法是否能正常运行。...当很多方法都都需要传入相同参数时,要写很多重复代码,可维护性大大降低。 参数有效性验证需要写在控制器内方法,会产生冗余代码。...:nest-绑定管道 随后,我们即可在dto层中使用它相关装饰器来校验参数了,AppDto.ts部分代码如下所示: import { IsString, MinLength } from "class-validator...我们从class-validator'包引入了string类型验证装饰器,它还能验证其它类型,感兴趣开发者请移步:class-validator#usage VO层(返回给客户端视图) 通常情况下

    2.1K40

    学完这篇 Nest.js 实战,还没入门来锤我!(长文预警)

    它利用JavaScript 渐进增强能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和...首先我们安装两个需要依赖包:class-transformer和class-validator npm install class-validator class-transformer -S 复制代码...然后在create-post.dto.ts文件添加验证, 完善错误信息提示: import { IsNotEmpty, IsNumber, IsString } from 'class-validator...,上面只编写了一些常用验证class-validator还提供了很多验证方法, 大家感兴趣可以自己看官方文档....,不带author参数, 返回数据有很清晰了: 通过上边学习,可以知道DTO本身是不存在任何验证功能, 但是我们可以借助class-validator来让DTO可以验证数据 总结 至此我们Nest.js

    9.9K11

    TypeScript 5.0 正式发布!

    TypeScript 5.0 实现了新装饰器标准、更好地支持 Node 和打构建工具 ESM 项目的功能、库作者控制泛型推导方法、扩展了 JSDoc 功能、简化了配置,并进行了许多其他改进。...下面来重写 loggedMethod 以利用它并打印出被修饰方法名称。...因此,在这些情况下,使用node16或nodenext解析选项可能是更好方法自定义解析标志 JavaScript 工具现在可以模拟“混合”解析规则,就像上面描述打包工具模式一样。...imports 和 exports 类型修饰符在这些情况下会有帮助。我们可以明确指定import或export仅用于类型分析,并且可以在JavaScript文件中使用类型修饰符完全删除。...还是 JavaScript 文件编写,TypeScript 都可以让我们知道是否错误地调用了函数。

    3.8K70

    TypeScript--deno前置学习

    4.TypeScriptJavaScript对比 ypeScript 与JavaScript两者特性对比,主要表现为以下几点: (1)TypeScript是一个应用程序级JavaScript开发语言...第10节:引用类型-正则表达式 用于验证最好最强大手段目前为止就是正则表达式。TypeScriptRegExp类表示正则表达式。...第12节: 面向对象编程-修饰符 访问修饰符 TypeScript语言和Java还有C#很像(因为我只会这两个面向对象语言),类属性访问可以用访问修饰符来进行限制。...第13节: 面向对象编程-继承和重写继承 继承:允许我们创建一个类(子类),从已有的类(父类)上继承所有的属性和方法,子类可以新建父类没有的属性和方法。 (1)先来创建一个父类。...TypeScript不支持多重继承。 类方法重写 重写就是在子类重写父类方法。 比如:在子类重写父类interest方法

    2.6K20
    领券