본문 바로가기
개발/프로젝트-식당 웨이팅 앱 FOOD LINE

230525 실전프로젝트3 [Node.js/Nest.js 환경 구축하기 2]

by 코딩하는짱구 2023. 5. 25.
반응형

✅오늘학습 Keyword

실전프로젝트를 nest 기반으로 진행하기 위해서 CRUD API 구현중이다.

강의자료: https://www.youtube.com/watch?v=3JminDpCJNE&t=2s

 

  • Dto란 무엇이며 왜, 어떻게 쓰이는가?

 

✅오늘 겪은 문제 

1. typeorm 설치, Entity 문제, PostgreSQL 연결

 

2. this.userRepository.createUser is not function에러;

[Nest] 12736 - 2023. 05. 25. 오후 3:43:55 ERROR [ExceptionsHandler] this.userRepository.createUser is not a function TypeError: this.userRepository.createUser is not a function at AuthService.signUp (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\실전프로젝트\NestJs\src\auth\auth.service.ts:10:32) at AuthController.signUp (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\실전프로젝트\NestJs\src\auth\auth.controller.ts:11:29) at C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\실전프로젝트\NestJs\node_modules\@nestjs\core\router\router-execution-context.js:38:29 at processTicksAndRejections (node:internal/process/task_queues:95:5) at C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\실전프로젝트\NestJs\node_modules\@nestjs\core\router\router-execution-context.js:46:28 at C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\실전프로젝트\NestJs\node_modules\@nestjs\core\router\router-proxy.js:9:17

 

// import { Module } from '@nestjs/common';
// import { AuthController } from './auth.controller';
// import { AuthService } from './auth.service';
// import { TypeOrmModule } from '@nestjs/typeorm';
// import { UserRepository } from './user.repository';

// @Module({
//   imports: [TypeOrmModule.forFeature([UserRepository])],
//   controllers: [AuthController],
//   providers: [AuthService],
// })
// export class AuthModule {}
 
 
 
 
import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserRepository } from './user.repository';
import { User } from './user.entity';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [AuthController],
  providers: [AuthService, UserRepository],
})
export class AuthModule {}
 
 
 

✅오늘 알게된 점

 

1. nest.js로 api 만드는 기본 순서를 파악했다. auth 기능으로 예시를 들어보면,

  • module 만들기 'nest g module auth'
  • controller 만들기 'nest g controller auth --no-spec'
  • service 만들기 'nest g service auth --no-spec'
  • entity파일(sequelize로 치면 model) 만들기 
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  password: string;
}
  • repository만들기
import { DataSource, Repository } from 'typeorm';
import { User } from './user.entity';
import { InjectRepository } from '@nestjs/typeorm';

export class UserRepository extends Repository<User> {
  constructor(@InjectRepository(User) private dataSource: DataSource) {
    super(User, dataSource.manager);
  }
}
  • 생성된 Repository를 다른 곳에서 사용하기 위해 넣어준다
  • auth.module안에 먼저 넣어준다
import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserRepository } from './user.repository';

@Module({
  imports: [TypeOrmModule.forFeature([UserRepository])],
  controllers: [AuthController],
  providers: [AuthService],
})
export class AuthModule {}
  • auth.service에도 넣어준다
import { UserRepository } from './user.repository';
import { Injectable } from '@nestjs/common';

@Injectable()
export class AuthService {
  constructor(private userRepository: UserRepository) {}
}
  • auth Dto가 필요하니까 dto파일을 따로 만든 후 repo에 연결시켜준다
import { AuthCredentialsDto } from './dto/auth-credential.dto';
import { DataSource, Repository } from 'typeorm';
import { User } from './user.entity';
import { InjectRepository } from '@nestjs/typeorm';

export class UserRepository extends Repository<User> {
  constructor(@InjectRepository(User) private dataSource: DataSource) {
    super(User, dataSource.manager);
  }

  async createUser(authCredentialsDto: AuthCredentialsDto): Promise<void> {
    const { username, password } = authCredentialsDto;
    const user = this.create({ username, password });
    await this.save(user);
  }
}
  • controller, service, repository 코드를 작성한다
반응형