nest cli를 이용한 모듈, 컨트롤러, 서비스 생성
auth 모듈 생성 - nest g module auth
auth 컨트롤러 생성 - nest g co auth
auth 서비스 생성 - nest g s auth
user Entity 생성
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
password: string;
}
Repository 생성
import { Injectable } from '@nestjs/common/decorators/core/injectable.decorator';
import { DataSource, Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserRepository extends Repository<User> {
constructor(private dataSource: DataSource) {
super(User, dataSource.createEntityManager());
}
}
auth.module에 등록하기
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { User } from './user.entity';
import { UserRepository } from './user.repository';
@Module({
imports: [TypeOrmModule.forFeature([UserRepository])],
controllers: [AuthController],
providers: [AuthService, UserRepository],
exports: [AuthService],
})
export class AuthModule {}
auth.service에 userRepository 의존성 주입
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserRepository } from './user.repository';
@Injectable()
export class AuthService {
constructor(
@InjectRepository(User)
private userRepository: UserRepository,
) {}
}
auth.controller에 authService 의존성 주입
import { Controller } from '@nestjs/common';
import { AuthService } from './auth.service';
@Controller('auth')
export class AuthController {
constructor(private authService: AuthService) {}
}
auth-credential dto 생성
export class AuthCredentialDto {
username: string;
password: string;
}
Repository에 회원가입 코드 추가
import { Injectable } from '@nestjs/common/decorators/core/injectable.decorator';
import { DataSource, Repository } from 'typeorm';
import { AuthCredentialDto } from './dto/auth-credential.dto';
import { User } from './user.entity';
@Injectable()
export class UserRepository extends Repository<User> {
constructor(private dataSource: DataSource) {
super(User, dataSource.createEntityManager());
}
async createUser(authCredentialDto: AuthCredentialDto): Promise<void> {
const { username, password } = authCredentialDto;
const user = this.create({ username, password });
await this.save(user);
}
}
service와 controller에 코드 추가 작성
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { AuthCredentialDto } from './dto/auth-credential.dto';
import { User } from './user.entity';
import { UserRepository } from './user.repository';
@Injectable()
export class AuthService {
constructor(
@InjectRepository(UserRepository)
private userRepository: UserRepository,
) {}
async signUp(authCredentialDto: AuthCredentialDto): Promise<void> {
return this.userRepository.createUser(authCredentialDto);
}
}
------------------------------------------------------------------------------------
import { Controller, Post, Body } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthCredentialDto } from './dto/auth-credential.dto';
@Controller('auth')
export class AuthController {
constructor(private authService: AuthService) {}
@Post('/signup')
signUp(@Body() authCredentialDto: AuthCredentialDto): Promise<void> {
return this.authService.signUp(authCredentialDto);
}
}
DTO에 validator를 이용해 유효성 조건을 넣어준다.
import { IsString, MinLength, MaxLength, Matches } from 'class-validator';
export class AuthCredentialDto {
@IsString()
@MinLength(4)
@MaxLength(20)
username: string;
@IsString()
@MinLength(4)
@MaxLength(20)
// 영어랑 숫자만 가능한 유효성 체크
@Matches(/^[a-zA-Z0-9]*$/, {
message: 'password only accepts english and number',
})
password: string;
}
@Matches 데코레이터의 첫번째 인자는 필수이며, 정규표현식이 들어가고, 두번째 인자는 옵셔널하게 정규표현식에 어긋 날 경우의 메세지를 전달해준다.
'Nest.js' 카테고리의 다른 글
[Nest.js] Passport, JWT 이용해서 토큰 인증 후 유저 정보 가져오기 (0) | 2023.01.30 |
---|---|
[Nest.js] 회원가입과 로그인 구현 2 (0) | 2023.01.27 |
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 3 (0) | 2023.01.26 |
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 2 (0) | 2023.01.26 |
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 1 (1) | 2023.01.26 |