ERROR [ExceptionHandler] Cannot read properties of undefined (reading 'name')

곽태민·2023년 12월 14일
0

Trouble Shooting

목록 보기
2/3

개요

socket 공부를 할겸 작은 프로젝트를 만들고, DB와 각 코드들을 세팅 후 코드를 실행시키는데 키자마자 아래 에러가 나타났다.

[Nest] 16206  - 2023. 12. 14. 오후 4:16:01   ERROR [ExceptionHandler] Cannot read properties of undefined (reading 'name')
TypeError: Cannot read properties of undefined (reading 'name')
    at new DataSource (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/src/data-source/DataSource.ts:139:29)
    at Injector.instantiateClass (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/injector.js:365:19)
    at callback (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/injector.js:65:45)
    at Injector.resolveConstructorParams (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/injector.js:144:24)
    at Injector.loadInstance (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/injector.js:70:13)
    at Injector.loadProvider (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/injector.js:97:9)
    at /Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/instance-loader.js:56:13
    at async Promise.all (index 5)
    at InstanceLoader.createInstancesOfProviders (/Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/instance-loader.js:55:9)
    at /Users/kwagtaemin/private_code/kaykaytalk_nestjs/kaykaytalk_rest/node_modules/@nestjs/core/injector/instance-loader.js:40:13

NestJS를 하면서 처음 보는 에러,, 구글링도 해보고 chatGPT에게도 물어봤지만 내가 찾고자 하는 해결 방법을 찾지 못했다.

그래서 찾은 방법은 노가다 하는 방법!

해결 방법

우선 해당 코드를 처음부터 천천히 뜯어보면서 코드를 옮겨보도록 했다. 처음부터 옮기다보니 우선 new DataSource를 보고 DB문제라고 생각했다.

그래서 MySQL과 연결하는 TypeORM Config를 살펴봤다. 실행시키면서 보니 문제는 없었고, AppModule 에서 TypeORM Config module을 import를 해도 문제가 없었다.

그러고나서 user 도메인을 옮겨보는데 갑자기 에러가 발생했다. 그래서 user 코드를 하나씩 뜯어보기로 했다.

// user.module.ts

import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserRepository } from './user.repository';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { DataSource } from 'typeorm';
import { UserService } from './user.service';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UserController],
  providers: [UserService, UserRepository, DataSource],
})
export class UserModule {}

이게 문제의 코드다.

UserSerivceUserRepositoryDataSoruce를 의존성 주입하여 queryRunner를 사용해서 Transaction을 사용하고 있다.

하지만 의존성 주입을 한다해서 모두 다 DataSorce를 Providers에 넣을 필요가 없다는 것..

왜냐하면 우리는 해당 Entity를 사용하기 위해서 Module 데코레이터 안에서 TypeOrmModule 을 사용하면서 DataSource도 사용하고 있던것,,

만약 providers에 DataSource를 정의하게되면 여러 모듈에서 충돌이 일어날 수 있기 때문에 굳이 정의를 하지 않도 된다고한다.

맨날 사용하다 이런 작은 실수로 시간을 날려먹게 됐다 ㅠㅠ 나중에 분명 이런일 이 있을 건데 미리 체험했다 생각하고 좋은 경험을 한 것 깉다.

profile
Node.js 백엔드 개발자입니다!

0개의 댓글