참조: https://wikidocs.net/158615
예전에 시퀄라이즈를 써봤지만 타입스크립트에서는 TypeORM이란게 있단다.
이것을 mysql과 연동시키려고 한다.
참조:
https://docs.nestjs.com/recipes/sql-typeorm#sql-typeorm
npm i typeorm@0.2.41 @nestjs/typeorm@8.0.2 mysql2
라이브러리 설치!
이제 @nestjs/typeorm 패키지에서 제공하는 TypeOrmModule을 이용하여
DB에 연결할 수 있음.
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
...
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'test',
database: 'test',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
],
})
export class AppModule {}
여기서 username, password, database는 환경변수로 넘거주어서 사용
참조:
https://docs.nestjs.com/recipes/sql-typeorm#sql-typeorm
시퀄라이즈의 모델처럼 여기서는 엔티티로 만든다.
나는 엔티티 폴더를 따로 만들어 관리했다.
import { Column, Entity, PrimaryColumn } from 'typeorm';
@Entity('User') // 유저라는 테이블을 만듦
export class UserEntity {
@PrimaryColumn()
id: string;
@Column({ length: 30 })
name: string;
@Column({ length: 60 })
email: string;
@Column({ length: 30 })
password: string;
@Column({ length: 60 })
signupVerifyToken: string;
}
참조: https://wikidocs.net/158617
위에서 만들어진 유저 테이블을 사용할 수 있게 nest.js에 주입
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserEntity } from './entity/user.entity';
@Module({
imports: [
...
TypeOrmModule.forFeature([UserEntity]),
],
...
})
export class UsersModule {}
한꺼번에 주입해야 되나? 아니면 *.ts 처럼 이렇게 할수도 있나?
...
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { UserEntity } from './entity/user.entity';
export class UsersService {
constructor(
...
@InjectRepository(UserEntity) private usersRepository: Repository<UserEntity>,
) { }
@InjectRepository
로 유저 레포지토리를 주입한다.