작성
·
45
·
수정됨
0
안녕하세요!
다음과 같이
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
안녕하세요, 인프런 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 생성에 대한 질문이 있습니다. 관련 코드의 초기화나 상태 관리 방법을 수정하여 이 문제를 해결할 수 있는 다양한 접근 방법을 보여줍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
강사님과 동일한 코드 상태로 진행하였는데 결과가 다르게 나와서 질문드린거였습니다. cursor 페이지네이션이기 때문에 dto.page 값이 undefined 인데 url querystring에 ?page=undefined 그대로 포함되는 문제가 있었습니다. 그래서 질문드린 것 처럼 if문에 dto[key]로 값 검증을 한 번 더 해야 강사님과 같은 결과가 나왔거든요.
어떤 부분때문에 이런 차이가 발생했는지 궁금하여서 질문 남겼습니다.