Почему DTO не выдают ошибку проверки в nestjs?
Я использую DTO в своем коде и получаю ожидаемый ответ, но в коде DTO, например, не выдают ошибку
export class CreateCatDto {
readonly name: string;
readonly age: number;
readonly breed: string;
}
В этом имени, возраст, порода является обязательным полем, и каждое из них имеет свой тип данных, но при работе с почтальоном, когда я не передаю все обязательные поля или только одно поле в тело почтальона, я не получаю никаких ошибок, например, требуется возраст если я передал два других поля или указал значение параметра не в соответствии с типом данных, например:- age: двадцать пять, тогда также должна возникнуть ошибка, но я не получаю.
Итак, это класс, созданный для
import { ApiProperty } from '@nestjs/swagger';
export class Cat {
@ApiProperty({ example: 'Kitty', description: 'The name of the Cat' })
name: string;
@ApiProperty({ example: 1, description: 'The age of the Cat' })
age: number;
@ApiProperty({
example: 'Maine Coon',
description: 'The breed of the Cat',
})
breed: string;
}
Это контроллер, в который я импортирую класс и Dto.
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import {
ApiBearerAuth,
ApiOperation,
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
import { CatsService } from './cats.service';
import { Cat } from './classes/cat.class';
import { CreateCatDto } from './dto/create-cat.dto';
@ApiBearerAuth()
@ApiTags('cats')
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
@ApiOperation({ summary: 'Create cat' })
@ApiResponse({ status: 403, description: 'Forbidden.' })
async create(@Body() createCatDto: CreateCatDto): Promise<Cat> {
return this.catsService.create(createCatDto);
}
}
1 ответ
Я не знаю, почему вы выбрали тег nestjs-swagger, DTO сам по себе не будет проверять входные данные, возможно, вам нужно использовать ValidationPipe с пакетом class-validator, как это предлагается в документах https://docs.nestjs.com/techniques/validation
Это так же просто, как добавить декоратор в свой код:
import { IsEmail, IsNotEmpty } from 'class-validator';
export class CreateCatDto {
@IsNotEmpty()
@IsString()
readonly name: string;
@IsNotEmpty()
@IsInt()
readonly age: number;
@IsNotEmpty()
readonly breed: string;
Вы можете увидеть все элементы здесь: https://github.com/typestack/class-validator
И если вы хотите очистить тело запроса, вам следует использовать сериализатор, чтобы помочь: https://docs.nestjs.com/techniques/serialization
Это покажет или скроет ваши свойства DTO на основе декораторов каждого поля. Вам необходимо установить пакет class-transformer.
import { Exclude } from 'class-transformer';
export class UserEntity {
id: number;
firstName: string;
lastName: string;
@Exclude()
password: string;
constructor(partial: Partial<UserEntity>) {
Object.assign(this, partial);
}
}
Важно помнить, что перехватчики будут запускаться по вашему запросу и ответу.