В NestJS, популярной платформе для создания масштабируемых приложений Node.js, проверка классов играет решающую роль в обеспечении целостности и согласованности данных. В этой статье мы рассмотрим различные методы проверки классов в NestJS, а также приведем примеры кода, иллюстрирующие их использование. Давайте погрузимся!
- Использование декораторов 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;
}
- Применение каналов проверки:
Каналы проверки предоставляют механизм, подобный промежуточному программному обеспечению, для обработки проверки классов. Применяя каналы проверки на уровне контроллера или метода, вы можете автоматически проверять входящие запросы. Вот пример:
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
}
}
- Пользовательская проверка:
Вы можете создавать собственные правила проверки, определив свои собственные декораторы. Допустим, мы хотим проверить, что пароль содержит хотя бы одну заглавную букву, строчную букву и цифру. Вот пример:
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;
}