반응형
CLI에서 아래명령어로 간단하게 기본파일을 생성할 수 있습니다
nest g resource name
name에 원하는 명칭을 지정합니다. 그런다음 REST API 와 y를 선택하면 아래와 같은 구조로 파일이 생성됩니다
이렇게 패키지가 생성되었다면 그다음 먼저 DB관련 설정을 합니다. 우선 아래 명령어로 typeORM을 설치합니다
npm install mssql typeorm @nestjs/typeorm
저는 mssql을 사용하기 때문에 mssql을 썼지만 mysql을 사용하신다면 mysql2를 대신설치 하셔도 됩니다. 패키지 설치가 완료되었다면 이제 설정을 추가하면 됩니다. 우선 app.module.ts에 아래와 같이 DB설정을 추가합니다
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { User } from './users/entities/user.entity';
import { UsersModule } from './users/users.module';
@Module({
imports: [UsersModule,
TypeOrmModule.forRoot({
type: 'mssql',
host: 'localhost',
port: 1433,
username: 'nest',
password: 'nest',
database: 'nest',
entities: [User],
synchronize: true,
extra: {
trustServerCertificate: true,
}
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
그런다음 resouce로 생성했던 모듈에도 설정을 추가합니다. users.module.ts 파일에 아래와 같이 설정을 추가 합니다
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UsersController],
providers: [UsersService]
})
export class UsersModule {}
DTO와 Entity도 아래와 같이 간단하게 구현해줍니다
export class CreateUserDto {
name: string;
age: number;
}
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
}
이제 DTO와 Entity 변환할수 있는 패키지를 추가합니다. 저는 class-transformer 패키지를 이용하여 구현하였기 때문에 아래 명령어로 설치 할수 있습니다
npm install class-transformer --save
npm install reflect-metadata --save
이제 users.service.ts 파일에 아래와 같이 Repository 추가와 DTO <-> Entity 변환 함수를 추가하고 나머지 CRUD 함수를 구현하면 마무리 입니다
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { classToPlain, plainToClass } from 'class-transformer';
import { Repository } from 'typeorm';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { User } from './entities/user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
static toModel(createUserDto :CreateUserDto ) : User {
const data = classToPlain(createUserDto);
return plainToClass(User, data);
}
static toModelByUpdateDTO(updateUserDto :UpdateUserDto ) : User {
const data = classToPlain(updateUserDto);
return plainToClass(User, data);
}
create(createUserDto: CreateUserDto) {
return this.usersRepository.save(UsersService.toModel(createUserDto));
}
findAll() {
return this.usersRepository.find();
}
findOne(id: number) {
return this.usersRepository.findOneById(id);
}
update(id: number, updateUserDto: UpdateUserDto) {
return this.usersRepository.update(id, UsersService.toModelByUpdateDTO(updateUserDto));
}
remove(id: number) {
return this.usersRepository.delete(id);
}
}
반응형
'NestJS' 카테고리의 다른 글
NestJS 시작하기 (0) | 2023.03.05 |
---|
댓글