Комплексное руководство по проверке классов в NestJS: методы и примеры кода

В NestJS, популярной платформе для создания масштабируемых приложений Node.js, проверка классов играет решающую роль в обеспечении целостности и согласованности данных. В этой статье мы рассмотрим различные методы проверки классов в NestJS, а также приведем примеры кода, иллюстрирующие их использование. Давайте погрузимся!

  1. Использование декораторов Class-Validator.
    NestJS использует мощную библиотеку Class-Validator для упрощения проверки. Вы можете определить правила проверки с помощью декораторов, таких как @IsString, @IsNumber, @IsNotEmptyи других. Давайте рассмотрим пример проверки сущности пользователя:
import { IsString, IsNotEmpty, IsEmail } from 'class-validator';
export class UserDto {
  @IsString()
  @IsNotEmpty()
  name: string;
  @IsEmail()
  email: string;
}
  1. Применение каналов проверки:
    Каналы проверки предоставляют механизм, подобный промежуточному программному обеспечению, для обработки проверки классов. Применяя каналы проверки на уровне контроллера или метода, вы можете автоматически проверять входящие запросы. Вот пример:
import { Controller, Post, Body, UsePipes } from '@nestjs/common';
import { ValidationPipe } from '@nestjs/common';
import { UserDto } from './user.dto';
@Controller('users')
export class UsersController {
  @Post()
  @UsePipes(new ValidationPipe())
  createUser(@Body() userDto: UserDto) {
    // Handle user creation logic
  }
}
  1. Пользовательская проверка:
    Вы можете создавать собственные правила проверки, определив свои собственные декораторы. Допустим, мы хотим проверить, что пароль содержит хотя бы одну заглавную букву, строчную букву и цифру. Вот пример:
import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';
export function PasswordStrength(validationOptions?: ValidationOptions) {
  return function (object: Object, propertyName: string) {
    registerDecorator({
      name: 'passwordStrength',
      target: object.constructor,
      propertyName: propertyName,
      options: validationOptions,
      validator: {
        validate(value: any, args: ValidationArguments) {
          // Perform custom validation logic
          return /* true or false based on the validation */
        },
      },
    });
  };
}
export class UserDto {
  // Other properties
  @PasswordStrength()
  password: string;
}