dto 필드 기본값 이슈에 대해 질문드립니다.
101
작성한 질문수 6
안녕하세요!
다음과 같이
GET: http://localhost:3000/posts
아무런 파라미터 값 없이 요청을 실행했을 때

dto 객체의 기본 상태는 다음과 같고, 응답 결과로 아래와 같은 nextURL을 받을 수 있었습니다.
"next": "http://localhost:3000/posts?page=undefined&order__createdAt=ASC&take=20&where__id__more_than=23"cursorPagination 이기 때문에 page를 사용하지 않지만 url에는 조립되는 이유가 로직에 값을 검증하는 부분이 없어서 그런 것 같은데요, 아래와 같이 값(dto[key])를 검증하는 것을 추가하니 문제 없이 동작하였습니다.
if (
dto[key] // 값 검증 추가
&& key !== 'where__id__more_than'
&& key !== 'where__id__less_than'
) {
nextUrl.searchParams.append(key, dto[key]);
}"next": "http://localhost:3000/posts?order__createdAt=ASC&take=20&where__id__more_than=23"그런데 강사님께서는 따로 검증하지 않고 진행하셨음에도 nextUrl 쪽에 page가 따로 붙어나오진 않는 것 같은데요, 어떤 차이에서 발생한걸까요?.. ㅠㅠ
답변 2
0
안녕하세요!
질문을 제가 잘 이해 못한 것 같습니다.
key value를 URL에 append하고 계시는건 잘 하고계시는 것 같은데 어떤 부분이 문제인지 다시 한번 확인 부탁드립니다.
감사합니다!
0
강사님과 동일한 코드 상태로 진행하였는데 결과가 다르게 나와서 질문드린거였습니다. cursor 페이지네이션이기 때문에 dto.page 값이 undefined 인데 url querystring에 ?page=undefined 그대로 포함되는 문제가 있었습니다. 그래서 질문드린 것 처럼 if문에 dto[key]로 값 검증을 한 번 더 해야 강사님과 같은 결과가 나왔거든요.
어떤 부분때문에 이런 차이가 발생했는지 궁금하여서 질문 남겼습니다.
0
안녕하세요.
이유는 보여주신 위치에서 알 수 있는건 아닌 것같습니다. 하지만 어찌됐던 별로 중요하지 않은 부분으로 생각됩니다. undefined의 경우 정의하지 않은 것과 같은 의미이기 때문에 모든 undefined 값은 따로 필터링해서 append 안해주시면 될 것 같습니다.
감샤합니다!
0
안녕하세요, 인프런 AI 인턴입니다.
GET 요청을 보낼 때, DTO 객체의 기본값으로 인해 nextURL에 불필요한 page 파라미터가 포함되는 문제에 대해 질문을 주셨습니다. 이 문제는 DTO 객체의 필드가 초기화되지 않은 상태로 undefined 값이 nextURL에 포함되었을 때 발생합니다. 이를 방지하기 위해 undefined 값을 가지는 경우 해당 키를 검증하여 nextURL에 포함되지 않도록 할 수 있습니다.
질문 주신 내용에서, dto[key]로 작성한 검증 조건은 가장 일반적인 방법으로, undefined, null, 0, false 등의 경우를 걸러줄 수 있습니다. 하지만, 강사님의 코드에서는 해당 부분을 별도로 처리하지 않았음에도 불구하고 깔끔한 URL이 생성된 이유는 몇 가지 가능성을 생각할 수 있습니다:
DTO 초기화: 강사님이 소개하는 과정 중
DTO를 초기화하거나, 특정 상태를 보장하는 미들웨어나 인터셉터를 사용할 수 있습니다.다른 검증 논리: 강의 중간에
DTO내 값들이 유효한 상태로 유지되도록 보장하는 로직이 있을 수 있습니다. 예를 들어 기본 값을 설정하거나, 특정 값일 때 제외하는 코드를 미리 삽입했을 수도 있습니다.환경 차이: 개발 환경이나 설정의 미세한 차이에서 비롯된 것일 수 있습니다. Node.js의 버전 차이, TypeScript 설정 등도 간혹 영향을 줄 수 있으므로 확인이 필요합니다.
이와 관련하여 참고할 만한 유사한 사례로는 NestJS 에서의 조건부 URL 생성에 대한 질문이 있습니다. 관련 코드의 초기화나 상태 관리 방법을 수정하여 이 문제를 해결할 수 있는 다양한 접근 방법을 보여줍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
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
343
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





