inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Cursor Pagination 적용하기

dto 필드 기본값 이슈에 대해 질문드립니다.

101

흔들거북이

작성한 질문수 6

0

안녕하세요!

다음과 같이

GET: http://localhost:3000/posts
아무런 파라미터 값 없이 요청을 실행했을 때

image.png

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가 따로 붙어나오진 않는 것 같은데요, 어떤 차이에서 발생한걸까요?.. ㅠㅠ

 

 

 

javascript typescript rest-api nestjs backend

답변 2

0

코드팩토리

안녕하세요!

질문을 제가 잘 이해 못한 것 같습니다.

key value를 URL에 append하고 계시는건 잘 하고계시는 것 같은데 어떤 부분이 문제인지 다시 한번 확인 부탁드립니다.

감사합니다!

0

흔들거북이

강사님과 동일한 코드 상태로 진행하였는데 결과가 다르게 나와서 질문드린거였습니다. cursor 페이지네이션이기 때문에 dto.page 값이 undefined 인데 url querystring에 ?page=undefined 그대로 포함되는 문제가 있었습니다. 그래서 질문드린 것 처럼 if문에 dto[key]로 값 검증을 한 번 더 해야 강사님과 같은 결과가 나왔거든요.

 

어떤 부분때문에 이런 차이가 발생했는지 궁금하여서 질문 남겼습니다.

0

코드팩토리

안녕하세요.

이유는 보여주신 위치에서 알 수 있는건 아닌 것같습니다. 하지만 어찌됐던 별로 중요하지 않은 부분으로 생각됩니다. undefined의 경우 정의하지 않은 것과 같은 의미이기 때문에 모든 undefined 값은 따로 필터링해서 append 안해주시면 될 것 같습니다.

감샤합니다!

0

흔들거북이

넵. 저도 검증하고 그냥 넘어가면 되는 부분이였는데 수강하던 당시엔 좀 신경쓰였던 부분이였어서요 혹시나 해서 질문드렸었습니다. 재차 확인 감사드립니다~!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

GET 요청을 보낼 때, DTO 객체의 기본값으로 인해 nextURL에 불필요한 page 파라미터가 포함되는 문제에 대해 질문을 주셨습니다. 이 문제는 DTO 객체의 필드가 초기화되지 않은 상태로 undefined 값이 nextURL에 포함되었을 때 발생합니다. 이를 방지하기 위해 undefined 값을 가지는 경우 해당 키를 검증하여 nextURL에 포함되지 않도록 할 수 있습니다.

질문 주신 내용에서, dto[key]로 작성한 검증 조건은 가장 일반적인 방법으로, undefined, null, 0, false 등의 경우를 걸러줄 수 있습니다. 하지만, 강사님의 코드에서는 해당 부분을 별도로 처리하지 않았음에도 불구하고 깔끔한 URL이 생성된 이유는 몇 가지 가능성을 생각할 수 있습니다:

  1. DTO 초기화: 강사님이 소개하는 과정 중 DTO를 초기화하거나, 특정 상태를 보장하는 미들웨어나 인터셉터를 사용할 수 있습니다.

  2. 다른 검증 논리: 강의 중간에 DTO 내 값들이 유효한 상태로 유지되도록 보장하는 로직이 있을 수 있습니다. 예를 들어 기본 값을 설정하거나, 특정 값일 때 제외하는 코드를 미리 삽입했을 수도 있습니다.

  3. 환경 차이: 개발 환경이나 설정의 미세한 차이에서 비롯된 것일 수 있습니다. 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