반응형
✅오늘학습 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 코드를 작성한다
반응형
'개발 > 프로젝트-식당 웨이팅 앱 FOOD LINE' 카테고리의 다른 글
230601 실전프로젝트6 [Node.js/Nest.js 공공 data저장, 좌표주입하기] (0) | 2023.06.01 |
---|---|
230530 실전프로젝트5 [Node.js/Nest.js 공공 data와 카카오맵API 연동하기] (0) | 2023.05.30 |
230526 실전프로젝트4 [Node.js/Nest.js 와 카카오맵API 연동하기] (0) | 2023.05.26 |
230520 실전프로젝트2 [Node.js/Nest.js 환경 구축하기 1] (0) | 2023.05.20 |
230519 실전프로젝트1 [프로젝트 기획] (0) | 2023.05.19 |