首页
学习
活动
专区
工具
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 相关的问题。

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

相关·内容

没有搜到相关的沙龙

领券