3. nest.js
service
nest g service
위 명령어를 이용하여 movies.service.spec.ts와 movies.service.ts 파일을 생성할 수 있다.
추가적으로 app.module.ts의 providers에 MoviesService를 추가한다
update
{
"hack":"by me"
}
patch를 실행하는 동안 해커로 인해 원치 않은 데이터가 추가될 가능성이 있기 때문에 update에서 이러한 데이터를 검수하는 유효성 검사를 실행해야 한다. nest.js에는 이러한 유효성 검사에 도움을 줄 수 있는 유용한 도구를 지원한다.
DTO
데이터 전송 객체(Data transfer Object)
export class CreateMovieDto{
readonly title: string;
readonly year: number;
readonly genres: string[];
}
보낼 데이터를 정의한다.
그러나 이것으로만은 유효성 검사를 수행할 수 없다. DTO는 프로그래머로서 코드를 더 간결하게 만들 수 있도록 하는 역할이다. 유효성 검사를 수행하게 하기 위해서는 몇가지 추가적인 작업이 필요하다.
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000); //port
}
Validationpipe를 이용하여 유효성 검사를 한다.
npm i class-validator class-transformer
- 설치해야 할 모듈
import { IsString,IsNumber } from "class-validator";
export class CreateMovieDto{
@IsString()
readonly title: string;
@IsNumber()
readonly year: number;
@IsString({each:true})
readonly genres: string[];
}
이러한 식으로 코드를 작성하면 유효성 검사를 통해 형식에 맞지 않은 데이터가 post 될 경우 에러를 발생한다.
{
"statusCode": 400,
"message": [
"title must be a string",
"year must be a number conforming to the specified constraints",
"each value in genres must be a string"
],
"error": "Bad Request"
}
Validationpipe
위의 유효성 검사를 위해 사용한 Validationpipe는 여러 기능을 가지고 있다.
- whitelist - 데코레이터가 없는 모든 객체를 무시한다. (hacked 데이터는 등록된 데코레이터가 없기 때문에 무시된다)
- forbidNonWhiteListed - 잘못된 데이터가 수신되면 존재해서는 안되는 데이터라고 출력
- transform - 유저들이 보낸 데이터를 우리가 원하는 실제 타입으로 변환한다.
update DTO
import { IsString,IsNumber } from "class-validator";
export class UpdateMovieDto{
@IsString()
readonly title?: string;
@IsNumber()
readonly year?: number;
@IsString({each:true})
readonly genres?: string[];
}
?를 이용하여 필수 사항이 아님을 설정한다.
PartialType
npm i @nestjs/mapped-types