cleanUrl: /본격-프로젝트-시작
이번 장에서는 UserService
의 create
메서드를 작성하고, 이를 UsersController
와 연결하는 과정을 살펴보자.
먼저, UserService
에서 TypeORM의 Repository
를 주입해야 한다. 이를 위해 @InjectRepository
데코레이터를 사용한다.
import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './users.entity';
@Injectable()
export class UsersService {
constructor(@InjectRepository(User) private repo: Repository<User>) {}
}
@InjectRepository(User)
를 사용하면 NestJS의 의존성 주입 시스템이 자동으로 User
엔터티와 연결된 Repository
인스턴스를 주입한다.
이제 create
메서드를 작성한다. 사용자의 email
과 password
를 받아 새로운 사용자 엔터티를 생성하고, save()
메서드로 이를 데이터베이스에 저장한다.
import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './users.entity';
@Injectable()
export class UsersService {
constructor(@InjectRepository(User) private repo: Repository<User>) {}
create(email: string, password: string) {
const user = this.repo.create({ email, password });
return this.repo.save(user);
}
}
UsersController
에서 UsersService
를 주입하고, create
메서드를 호출하여 사용자 생성 API를 구현한다.
import { Body, Controller, Post } from '@nestjs/common';
import { CreateUserDto } from './dtos/create-user.dto';
import { UsersService } from './users.service';
@Controller('auth')
export class UsersController {
constructor(private usersService: UsersService) {}
@Post('/signup')
createUser(@Body() body: CreateUserDto) {
this.usersService.create(body.email, body.password);
}
}
@Body()
데코레이터를 사용하여 클라이언트 요청의 본문에서 email
과 password
를 받아 create
메서드에 전달한다.