nestjs 프로젝트와 database 연결이 다 됐으면 resource(User)를 생성해보자
npm g res resourcename
npx @nestjs/cli g res resourcename
명령어 입력후
Rest api 선택
기본 제공 CRUD가 필요없다면 n 을 선택
1.entity 생성
다음과 같이 entities 폴더와 user.entity.ts 파일을 생성한다.
user.entity.ts
@Entity()
export class User {
@PrimaryGeneratedColumn() // 자동으로 고유한 키값을 생성해 줌
public id : string;
@CreateDateColumn() // 생성될때 날짜 값이 저장됨
public createAt : Date;
@CreateDateColumn()
public updateAt : Date;
@Column()
public username: string;
@Column()
public email: string;
@Column()
public password: string;
}
2.dto 생성
API 매소드를 정의할때 API 목적에 따라 사용하는 변수들이 다르기때문에 dto를 사용하여 불필요한 변수 할당을 줄인다.
다음과 같이 dto 폴더, dto 파일을 생성해준다.
@Module({
imports:[TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService]
})
service
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private userRepository:Repository<User>,
) {
} // constructor 는 객체가 생성될때 호출되며 해당 class에서 사용할 userRepository 선언한다.
async createUser(createUserDto:CreateUserDto):Promise<User>{
const user = await this.userRepository.create(createUserDto);
await this.userRepository.save(user);
return user;
}
async getUsers():Promise<User[]>{
return this.userRepository.find();
}
}
controller
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post('create')
async createUser(
@Body() // @Body()는 NestJS에서 컨트롤러의 라우트 핸들러(메서드)에서 요청의 본문(body) 데이터를 가져오기 위해 사용되는 데코레이터로 없으면 데이터가 넘어가지 않는다
createUserDto: CreateUserDto
): Promise<User>{
return await this.userService.createUser(createUserDto);
}
@Get('all')
async getUsers():Promise<User[]>{
return await this.userService.getUsers();
}
}
이와 같이 원하는 매소드들을 만들어 사용할 수 있다.