DB와 연결하기 위해서는 최상위 app.module에서 DB와 연결을 위한 설정을 해줘야한다.
그 전에 우리는 Typeorm 패키지를 설치 해야한다. Typeorm은 DB와 객체를 매핑하여 MYSQL을 쿼리문을 직접 DB에서 짜지않고 사용할 수 있게 해준다.
npm install --save @nestjs/typeorm typeorm mysql2
2가지 방법이 있습니다.
필자는 2번째 방법으로 하였습니다. 아래는 app.module의 코드입니다.
import { TypeOrmModule } from '@nestjs/typeorm'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { user } from './testuser/testuser.entity'; import { TestuserModule } from './testuser/testuser.module'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '1234', database: 'test', entities: [], synchronize: true, }), TestuserModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
이 과정에서는 필자는 지속적인 커넥션 error를 겪었다. 필자와 같은 에러가 뜨면 한번 같이 시도하시길 바랍니다.
Error: Entity metadata for Star#user was not found. Check if you specified a correct entity object and if it's connected in the connection options.
위의 엔티티 부분을 설정을 안해줘서 생기는 에러이다. 위의 엔티티를 설정하는 방법도 두가지 방법이 있습니다.
1. Entity class의 명을 직접 호출하는 법
Ex)TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '1234', database: 'test', entities: [user], synchronize: true, }),
- entity의 이름을 가진 ts,js파일을 모두 호출하는 법
위의 코드처럼 설정해주면 다 불러올 수 있다. 근데 필자는 가끔 이렇게 설정해주면 Typeorm이 못 호출을 못하는 경우가 있어서 1번으로 호출하는것을 더 선호합니다.TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '1234', database: 'test', entities: [__dirname+'../**/*.entity.{js,ts}'], synchronize: true, }),
위 사진 처럼 user 테이블이 생긴것을 확인 할 수 있다.