강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김호찌님의 프로필 이미지
김호찌

작성한 질문수

탄탄한 백엔드 NestJS, 기초부터 심화까지

passport와 인증 전략 & Custom decorator

9:37 cat.readOnlyData가 어떻게 작동하게되었는지 궁금해요.

작성

·

294

2

일단 제 생각으로는 

@CurrentUser() cat이 req.user를 반환하니까

cat이 { "_id" : "12345",  email: ..... } 이런식으로 res로 반환된다고 이해를 했어요.

그런데, 어떻게 cat.readOnlyData;가 작동이 되고있는건가요? cat의 객체 데이터에는 readOnlyData가 없지않나요?

제가 알기로는 readOnlyCat은 스키마에 Virtual Field 정의만 해줬던 것으로 기억해요.

제가 놓친 부분이 있다면 어떤 강의를 다시 봐야할까요?

답변 1

3

윤상석님의 프로필 이미지
윤상석
지식공유자

안녕하세요. 변준필님!

"@CurrentUser() cat이 req.user를 반환하니까

cat이 { "_id" : "12345",  email: ..... } 이런식으로 res로 반환된다고 이해를 했어요."

에서 정확히 cat은 "cats.schema.ts"의 Cat 타입입니다. 

cat은 "readOnlyData" 필드를 가지고 있는데, 위의 클래스에서는 readOnlyData의 타입만 명시되어 있고 정의되어 있지는 않습니다.

하지만 cat.readOnlyData를 하는 순간, mongoose에서 @Prop이 없으므로 virtual field라는 것을 인식하고 아래와 같은 해당 스키마에서 정의되어 있는 virtual method를 찾습니다. 

위의 코드를 해석하면, readOnlyData라는 virtual field에 접근(getter)했을때, get(function ...) 메서드가 수행이 되고 이 메서드의 return 값이 해당하는 readOnlyData의 값이 되도록 하는 것입니다. 이때 get(function (this) { ...} )의 this는 해당 객체(cat)을 의미합니다.

따라서 위의 코드에서 readOnlyData를 받아서 return하게 되는 것입니다.

virtual field의 설명은 "회원가입 서비스 개발 & DTO 패턴 - 12분부터"에 있습니다. 

추가적으로 mongoose의 virtual field의 공식문서 링크입니다. https://mongoosejs.com/docs/tutorials/virtuals.html

이해가 안되시는 부분있으시면 답글주세요.

감사합니다. :)

김호찌님의 프로필 이미지
김호찌
질문자

감사합니다! 어떤식으로 되는지 이해가 갔습니다!

김호찌님의 프로필 이미지
김호찌

작성한 질문수

질문하기