create_chat에서 빈 객체 보낼 때 ValidationPipe 예외 안 던지는 현상이 있습니다.
116
작성한 질문수 8
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다!
[코드팩토리 디스코드]https://bit.ly/3HzRzUM
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요. 강의 중 WebSocket에서 create_chat 이벤트에 빈 객체 {}를 보냈을 때,
ValidationPipe가 예외를 잘 던져서 클라이언트(Postman)에서 exception 이벤트가 잘 발생하는 걸 확인했습니다.
그런데 제가 강의 코드와 동일하게 다음과 같이 작성했는데요
그런데 제가 Postman에서 {}만 보냈을 때는 ValidationPipe가 예외를 던지지 않고,
exception 이벤트도 발생하지 않아서 디버깅에 꽤 시간이 걸렸습니다.
CreateChatDto에 @IsDefined()를 추가하니까 그제서야 예외가 발생해서 Postman에서 exception이 감지됐습니다.
왜 강의에선 @IsDefined() 없이도 {}만 보내면 예외가 잘 발생하던데, 현재는 왜 @IsDefined()를 추가해야만 예외가 던져지는 걸까요?
답변 2
0
안녕하세요!
혹시 저와 기본 ValidationOption 상태가 다른거 아닌가요?
https://github.com/codefactory-co/nestjs-lv1/blob/main/src/main.ts
확인 부탁드립니다.
감사합니다!
0
제코드는 이런게 큰 차이는 없는거 같은데 혹시 확인 가능하신가요?
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(
new ValidationPipe({
// MoraThan과 Order로 필터링하기에서 추가
transform: true,
// 제너레이터 기준으로 타입 변환 해줌 예시) IsNumber()
transformOptions: {
enableImplicitConversion: true,
},
whitelist: true,
forbidNonWhitelisted: true,
}),
);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
0
안녕하세요!
어딘가는 차이가 있을 것 같습니다.
제가 테스트를 해보기 위해서 그냥 새로 프로젝트를 만들어서 @IsDefined() 없이 그냥 요청을 보내봤는데 에러는 잘 발생하는걸로 확인됩니다. 새 프로젝트에 ValidationPipe만 적용 했습니다.


위 스크린샷 확인 해주세요!
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. ssavengers님.
이 문제는 ValidationPipe와 관련된 특성 때문에 발생할 수 있습니다. ValidationPipe는 기본적으로 객체의 속성에 유효성 검사 데코레이터가 있어야 예외를 발생시킵니다. 강의에서 예외가 발생했던 이유는 CreateChatDto에 정의된 속성에 대해 필수적으로 값이 제공되지 않을 경우 기본적으로 예외를 던지도록 설정되어 있거나, @IsDefined()와 같은 검사가 이루어졌기 때문일 수 있습니다.
일반적으로 괄호 {}로 빈 객체를 보낼 경우, 객체 내부의 필드가 체크되지 않는다면 오류가 발생하지 않을 수 있습니다. 이때 @IsDefined() 데코레이터를 사용하면 특정 필드가 반드시 제공되어야 하는지 검사합니다.
따라서, 현재 상황에서는 CreateChatDto에서 모든 필요한 필드에 @IsDefined()데코레이터를 추가하여 필드가 반드시 포함되어야 한다고 명시하는 것이 중요합니다. 이렇게 설정하면 빈 객체를 보낼 경우에도 예외가 발생합니다.
관련 자료
- NestJS ValidationPipe: ValidationPipe의 사용법과 설정에 관한 공식 문서를 참고하세요.
이 문제에 대한 해결로 @IsDefined()를 추가하신 것은 매우 적절한 방법이고, 이를 통해 보다 견고한 데이터 검증을 구현할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
cascade 질문
0
38
1
@types/bcrypt 설치과정이 누락된것같습니다.
0
45
1
process.env port key 에러
0
45
1
추상화
0
48
1
[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상
0
93
2
where 키워드가 들어가는 메서드와 아닌 메서드
0
56
1
BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?
0
69
1
app.controller app.service 는 지워도되나요?
0
69
1
@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이
0
78
1
포트 3000에서 listen하는 곳까지 넘어가지 않습니다.
0
64
1
PickType 사용 시 `as const`를 꼭 사용해야 하나요?
0
102
2
socket connect 오류
0
96
2
강의를 들으면서 궁금한 점
0
97
2
DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?
0
59
2
커리큘럼 질문
0
98
2
put 요청은 언제
0
90
3
typeorm VS prisma
0
344
2
142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.
0
76
2
User 데코레이터 버그 수정 전달드립니다.
0
67
1
git 주소 부탁드립니다.
0
112
2
nest g resource 명령어 에러
0
99
2
로그인 엔드포인트 관련 질문
0
84
2
yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우
0
146
3
"흔히 사용되는 메서드" 강의 관련 질문입니다~
0
95
2





