본문 바로가기
기타 프로그램

NestJs TypeORM로 DB 2개 이상 연결하기

by 고체물리학 2022. 6. 28.

1. module 추가

nest g module 모듈명

추가하려는 DB의 모듈 이름을 터미널 창에 입력하면 자동으로 Module이 만들어진다

 

2. app.module.ts 에 추가할 DB 정보 추가

    TypeOrmModule.forRoot({
      type: 'mysql',
      host: '',
      port: 3306,
      username: '',
      password: '',
      database: '',
      entities: [__dirname + '/**/*.entity.{js,ts}'],
      synchronize: false,
    })

 

연결할 DB정보를 추가한다

Module은 1번 과정에서 자동으로 추가됨

 

3. Entity  추가

파일.entity.ts 파일 추가

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

@Entity({database:'database명', name: '테이블명'})
@Unique(['email'])
export class User{
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name_first: string;

  @Column()
  name_last: string;

  @Column()
  email: string;

  @Column()
  password: string;

  @Column()
  address: string;

  @Column()
  address_detail: string;

}

DB가 여러개 연결되어있을 때 테이블명을 명시 안 해주니까 접근이 안되어서 @Entity에 name을 추가했다

 

4. Repository 추가

.repository.ts

import { Repository, EntityRepository } from 'typeorm';
import { User } from './user.entity';

@EntityRepository(User)
export class UserRepository extends Repository<User> {

}

 

5. Service 추가

.service.ts

 npm install uuid --save
import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserRepository } from './user.repository';

const SALT_ROUNDS = 10;

@Injectable()
export class UserService {
    constructor(
        @InjectRepository(UserRepository)
        private userRepository: UserRepository
    ){}

	//user 추가
    async create(user:Partial<User>):Promise<User>{
        return this.userRepository.save(user);
    }
    
    //삭제
    async delete(id: number):Promise<void>{
        const result = await this.userRepository.delete(id);

        if(result.affected === 0){
            throw  new NotFoundException(`Can't find User with id ${id}` )
        }
    }
	
    //수정
    async updateUser(id:number,update: Partial<User>):Promise<User>{
       await this.userRepository.save(model);
       return this.findById(id);
    }
	
    //모든 테이블 행 조회
    async getAll(): Promise<User[]>{
        return this.userRepository.find();
    }

	//Id로 조회
    async getFindById(id: number):Promise<User>{
        const found = await this.userRepository.findOne(id);

        if(!found){
            throw new NotFoundException(`Can't find User with id ${id}`)
        }
        return found;
    }
    
}
반응형

 

6. Controller 추가

.controller.ts

import { Body, Controller,Delete,Get, Param, ParseIntPipe, Patch, Post, Req, Res} from "@nestjs/common";
import { Render } from "nest-jsx-template-engine";
import { UserModel } from "./user.entity";
import { UserService } from "./user.service";
import { UserDto } from "./dto/user.dto";
import { UserDetail} from "./views/user.view";
import { Response } from 'express';


@Controller('user')
export class UserController{
    constructor(private readonly userService: UserService){}

    @Get()
    getAllModel():Promise<BaseModel[]>
    {   
        const user = this.userService.getAllModel();
        return user
    }

    @Post('/register')
    async createUser(
        @Body() user:UserDto,
        @Res() res: Response,
    ):Promise<void>{
        await this.userService.create({
          name_first: body.name_first,
          name_last: body.name_last,
          email: body.email,
          password: body.password,
    });
        res.redirect(302, '/login');
    }


    @Get('/:id')
    getBoardById(@Param('id') id:number): Promise<User>{
        return this.userService.getModelById(id);
    }

    @Delete('/:id')
    deleteUser(@Param('id',ParseIntPipe) id: number):Promise<void>{
        return this.userService.delete(id);
    }

    @Patch('/:id/edit')
    updateUser(
        @Param('id',ParseIntPipe) id: number,
        @Body() body: BaseModelDto

    ){
        return this.userService.updateUser(id,body.email,body.password);
    }




}

 

7. Module에 controller와 service를 추가하여 다른 모듈에서 사용할 수 있도록 설정

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { UserRepository } from './user.repository';

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

export:[UserService] 추가하면 다른 모델에서 사용할 수 있다

 

반응형

댓글