NestJSでのDTO
npm i class-validator class-transformer
express検証を設定するミドルウェアに似ていると考えられます.
whiteList -> 엔티티 데코레이터에 없는 프로퍼티 값은 무조건 거름
forbidNonWhitelisted -> 엔티티 데코레이터에 없는 값 인입시 그 값에 대한 에러메세지 알려줌
transform -> 컨트롤러가 값을 받을때 컨트롤러에 정의한 타입으로 형변환
-paramで入力した値はstringで入力する必要があります.-ただし、dbではidはuuidではないので、ほとんどnumberタイプです.したがってidをparamsにインポートする場合はnumberに変換する必要がある.
-nestは、このような不要なプロセスを省略するために
transform
というオプションを作成した.import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
}),
);
await app.listen(3000);
}
bootstrap();
変換例
@Controller('movies') //movies라우터링 같음
export class MoviesController {
//매개변수 프로퍼티(Parameter Property) 를 이용하여 선언과 할당을 동시에 할 수 있습니다
constructor(private readonly moviesService: MoviesService) {}
@Get('/:id')
//원래는 id는 string이지만 movieId: number을 지정함으로 id의 타입은 number로 변환된다..
getOne(@Param('id') movieId: number): Movie {
console.log(typeof movieId);
return this.moviesService.getOne(movieId);
}
}
create-movie.dto
- @IsOptional()
-値がNULL(またはNULLまたは未定義)の場合でも、検証は無視されます.
import { IsNumber, IsString } from 'class-validator';
export class CreateMovieDto {
@IsString()
readonly title: string;
@IsNumber()
readonly year: number;
// 배열이면 each true
@IsOptional()
@IsString({ each: true })
readonly genres: string[];
}
@Controller('movies') //movies라우터링 같음
export class MoviesController {
//매개변수 프로퍼티(Parameter Property) 를 이용하여 선언과 할당을 동시에 할 수 있습니다
constructor(private readonly moviesService: MoviesService) {}
@Post()
create(@Body() movieData: CreateMovieDto) {
return this.moviesService.create(movieData);
}
}
@Injectable()
export class MoviesService {
private movies: Movie[] = []; //선언한 class내에서만 접근가능
create(movieData: CreateMovieDto) {
this.movies.push({
id: this.movies.length + 1,
...movieData,
});
}
}
npm i @nestjs/mapped-types
- PartialType
-入力タイプを返すすべてのプロパティがオプションタイプ(クラス)に設定されています.(要件:各プロパティには、少なくとも1つの検証データレコーダが適用されます).
import { PartialType } from '@nestjs/mapped-types';
import { IsNumber, IsString } from 'class-validator';
import { CreateMovieDto } from './create-movie.dto';
export class UpdateMovieDto extends PartialType(CreateMovieDto) {}
Reference
この問題について(NestJSでのDTO), 我々は、より多くの情報をここで見つけました https://velog.io/@abc5259/NestJS에서의-DTOテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol