-
[ NestJS ] mongoose에서 찾은 데이터 return 시 에러나는 이유Topic/Database 2023. 8. 5. 17:40반응형
NestJS에서 MongoDB에서 찾은 모델을 그대로 반환하려고 할 때 에러가 발생하는 이유는 반환하려는 데이터의 형식이 일치하지 않기 때문입니다. NestJS는 일반적으로 DTO(Data Transfer Object)를 사용하여 데이터의 형식을 정의하고 유효성을 검사합니다.
DTO를 사용하지 않고 MongoDB에서 찾은 모델을 그대로 반환하려는 경우, 해당 모델의 형식이 기본적인 JavaScript 객체(Object) 형태이거나 Mongoose 모델일 수 있습니다. 이 경우 NestJS에서 예상하는 형식과 일치하지 않으므로 오류가 발생합니다.
해결하는 방법으로는
- 만약 DTO를 사용하지 않고 MongoDB에서 찾은 모델을 그대로 반환하려는 경우, 데이터 모델을 직접 DTO로 변환해야 합니다.
- 일반적으로 class-transformer 패키지를 사용하여 데이터 모델을 DTO로 변환하는 것이 편리합니다. 이 패키지는 객체의 형식 변환을 처리하는 데 사용됩니다.
- 데이터 모델을 DTO로 변환하는 방법은 다음과 같습니다:
import { plainToClass } from 'class-transformer'; // MongoDB에서 찾은 모델을 DTO로 변환 const projectpaymentDto = plainToClass(ProjectPaymentDto, projectpayment); const projectDto = plainToClass(ProjectDto, project); const paymentDto = plainToClass(PaymentDto, payment); return { projectpayment: projectpaymentDto, project: projectDto, payment: paymentDto };
위의 코드에서 plainToClass() 함수를 사용하여 데이터 모델을 DTO로 변환합니다. plainToClass() 함수는 첫 번째 인수로 변환할 DTO 클래스(ProjectPaymentDto, ProjectDto, PaymentDto)를, 두 번째 인수로 변환할 데이터 모델(projectpayment, project, payment)을 전달합니다.
이러한 방법 중 하나를 선택하여 그래서 dto들을 각각의 모듈에서 생성해준 후 데이터의 형식을 명시적으로 정의하거나 변환하여 NestJS에서 반환하면 에러가 해결될 것입니다.
반응형'Topic > Database' 카테고리의 다른 글
[ MongoDB ] 컬렉션에서 field 이름 변경, 새로운 field 추가, 기존 field 삭제하는 방법 (0) 2023.09.02 [ MongoDB ] document의 field 이름 변경하는 방법 (0) 2023.08.19 [ MongoDB ] aws ec2(ubuntu 22.04) MongoDB에 MongoDB compass 연결하기 (0) 2023.05.05 [ MongoDB ] .sort() 에러 (ft. query) (0) 2023.03.11 [ Mongo DB ] buffering timed out after 10000ms" 에러 해결법 (0) 2023.03.04