Nestjs에서 typeorm을 써보자!

hugeman·2023년 8월 23일
0

DataBase

목록 보기
3/6

github : https://github.com/qmdch1/JS_nestjs_auth_passport_typeorm_bcrypt_session/tree/master

사전 정보를 설명 해드리겠습니다.
1. @nestjs/cli 명령어로 프로젝트를 생성
2. user라는 co, mo, s 생성합니다.

1. TypeOrm - SQLite 연동

import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'sqlite', // DB타입
      database: 'nest-auth-test.sqlite', // DB파일명
      entities: [User], // 엔티티 리스트
      synchronize: true, // DB에 스키마를 동기화 - 개발용으로만 사용한다.
      logging: true, // SQL실행로그 확인 - 개발용으로만 사용한다.
    }),
  ]
})

2. 엔티티 생성

user.entity.ts

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User{
    @PrimaryGeneratedColumn() // 자동증가
    id?: number; // ?은 선택 가능함

    @Column({ unique: true})
    email: string;

    @Column()
    password: string;

    @Column()
    username: string;

    @Column({ default: () => 'CURRENT_TIMESTAMP' }) // 펑션데이터를 사용하려면 람다식 써야함
    createdDt: Date;
}

3. Repository 생성 및 사용법

user.service.ts

import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';

constructor(@InjectRepository(User) private userRepository: Repository<User>, ){}

// 유저 생성
createUser(user): Promise<User>{
    return this.userRepository.save(user);
}

// 유저 한명 검색
async getUser(email: string){
    const result = await this.userRepository.findOne({
        where: {email},
    });
    return result;
}

// 유저 정보 업데이트
async updateUser(email, _user){
    const user: User = await this.getUser(email);
    console.log(_user);
    user.username = _user.username;
    user.password = _user.password;
    console.log(user);
    this.userRepository.save(user);
}

// 유저 정보 삭제
deleteUser(email: any){
    return this.userRepository.delete({ email });
}

4. Module에 Repository를 등록해주어야 service에서 찾을 수 있습니다.

user.module.ts

@Module({
  imports: [TypeOrmModule.forFeature([User])],
})

5. Entity가 등록이 되어 있어야 typeorm에서 해당 엔티티에 대한 메타 데이터를 읽을 수 있습니다.

app.module.ts

entities: [User], // 엔티티 리스트
profile
한 줄!

0개의 댓글