728x90


상황
users 생성 POST API에 email, name, password를 body 값으로 받아준다. 이때 DTO에 적용했던 validation에 걸리는 body 값 형식은 모두 예외처리하도록 하고싶다.
문제
DTO를 적용하면 바로 해결될 것이라 생각했으나, 예외 처리가 되지 않고 정상적으로 요청이 수신되었다.
...
@UseFilters(HttpExceptionFilter)
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
getCurrentUser() {
return 'currentUser';
}
@Post()
async signUp(@Body() body: CreateUserDto) {
console.log(body);
return 'signUp';
}
...
create-user.dto.ts는 아래와 같다.
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
export class CreateUserDto {
@IsEmail()
@IsNotEmpty()
email: string;
@IsString()
@IsNotEmpty()
password: string;
@IsString()
@IsNotEmpty()
name: string;
}
해결
ValidationPipe()를 글로벌하게 적용하지 않아서 발생한 문제였다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import * as hbs from 'express-handlebars';
import { HttpExceptionFilter } from './common/exceptions/http-exception.filter';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
// const app = await NestFactory.create(AppModule);
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.useGlobalFilters(new HttpExceptionFilter());
...
// 글로벌 validation pipe 설정
// DTO validation을 위함
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();

이제 에러 처리를 잘 해준다.
728x90
'World > Nest.js' 카테고리의 다른 글
| nestjs_docs_JWT Authentication (0) | 2023.09.22 |
|---|---|
| nestjs_실패로그_프로젝트 docker 환경변수 설정 문제 (1) | 2023.04.26 |
| nestjs_error_html formData를 axios로 서버에 전송하기 (0) | 2023.04.17 |
| nestjs_RDS Postgres 인스턴스 생성 및 nestjs 모듈 설치 (0) | 2023.04.15 |
| nestjs_view 엔진 적용하기(hbs) (0) | 2023.04.13 |
댓글