app.module.ts
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { UsersModule } from "./users/users.module";
@Module({
imports: [
TypeOrmModule.forRoot({
type: "mysql",
host: "127.0.0.1",
port: 3306,
username: "root",
password: "1234",
database: "test",
autoLoadEntities: true,
synchronize: true,
}),
UsersModule,
],
})
export class AppModule {}
user.entity.ts
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
}
user.controller.ts
- ParseIntPipe는 nest.js에서 제공하는 파이프로써 받은 데이터를 숫자로 변환해주는 파이프
- http요청시 파라미터는 기본적으로 문자열로 전송되는데, 전송된 파라미터를 숫자로 변환해주는 역할
- Promise<User>는 각 메서드들의 요청후 결괏값의 타입을 지정하는 문법으로, 해당 메서드의 반환값을 명확하게 알 수 있음
import {
Body,
Controller,
Delete,
Get,
Param,
Post,
ParseIntPipe,
} from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { User } from './user.entity';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Post()
create(@Body() createUserDto: CreateUserDto): Promise<User> {
return this.usersService.create(createUserDto);
}
@Get()
findAll(): Promise<User[]> {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number): Promise<User> {
return this.usersService.findOne(id);
}
@Delete(':id')
remove(@Param('id') id: string): Promise<void> {
return this.usersService.remove(id);
}
}
user.service.ts
- @Injectable 데코레이터는 NestJS에게 해당 클래스가 주입 가능한 서비스로 동작함을 선언함 => 의존성 주입(dependency Injection)을 지원 받을 수 잇음, 이 클래스는 다른 클래스에서 이용할 수 있음을 선언
- constructor: 클래스의 생성자 함수, 생성자 함수는 클래스가 인스턴스화 될떄 호출 되는함수
- @injectRepository(User)을 통해 데이터베이스와 클래스를 매핑함
- Repository는 typeORM에서 제공하는 클래스, 데이터베이스 테이블과 매핑하는 역할
- userRepository변수를 통해 User 엔티티와 연결되 데이터베이스 테이블에 대한 CRUD 작업 수행 가능
- private readonly는 해당 변수가 읽기전용임을 나타냄, 변수를 선언한 후에는 값을 변경할 수 없도록 선언
import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { Repository } from "typeorm";
import { CreateUserDto } from "./dto/create-user.dto";
import { User } from "./user.entity";
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private readonly usersRepository: Repository<User>
) {}
create(createUserDto: CreateUserDto): Promise<User> {
const user = new User();
user.firstName = createUserDto?.firstName;
user.lastName = createUserDto?.lastName;
user.isActive = false;
return this.usersRepository.save(user);
}
async findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: number): Promise<User> {
return this.usersRepository.findOneBy({ id: id });
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id);
}
}
POST요청
GET 요청
GET 요청 Params