인프런 커뮤니티 질문&답변

Min.e님의 프로필 이미지
Min.e

작성한 질문수

따라하며 배우는 NestJS

repository.ts 에서 method 를 가져 오고 싶은데, 해당 메소드가 없다고 뜨네요

작성

·

319

0

현재, nestjs로 게시판 만들기를 학습 하고 있는데,

에러에, 에러에, 에러에, 에러의 연속이네요...

 

데이터베이스 연결이 안 되는 에러를 계속 보다가 어찌 어찌 해결은 했는데

ERROR [TypeOrmModule] Unable to connect to the database.

 

이젠 메소드를 찾을 수 없다는 에러가 계속 뜨네요...

뭐가 문제인 것일까요...

 

후우 또 열심히 검색을 해봐야겠습니다...

 

// board.repository.ts

import { EntityRepository, Repository } from "typeorm";
import { Board } from "./board.entity";
import { CreateBoardDto } from "./dto/create-board.dto";
import { BoardStatus } from "./board-status.enum";

@EntityRepository(Board)
export class BoardRepository extends Repository<Board> {

    async createBoard(createBoardDto: CreateBoardDto) : Promise<Board> {
        const { title, description } = createBoardDto;
  
        const board = this.create({
           title,
           description,
           status: BoardStatus.PUBLIC
        })
  
        await this.save(board);
        return board;
     }
}
// boards.service.ts

import { Injectable, NotFoundException } from '@nestjs/common';
import { BoardStatus } from './board-status.enum';
import { CreateBoardDto } from './dto/create-board.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Board } from './board.entity';
import { Repository } from 'typeorm';
// import { BoardRepository } from './board.repository';

@Injectable()
export class BoardsService {
  constructor(
    @InjectRepository(Board) private boardRepository: Repository<Board>,
  ) {}


  createBoard(createBoardDto: CreateBoardDto) : Promise<Board> {
      return this.boardRepository.createBoard(createBoardDto);
   }

   async getBoardById(id: number): Promise <Board> {
      const found = await this.boardRepository.findOne(id);

      if(!found) {
         throw new NotFoundException(`Can't find board with id ${id}`)
      }

      return found;
   }


답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

Min.e님, repository.ts에서 메소드를 가져오시려 할 때 해당 메소드가 없다는 에러가 발생하는 상황이네요. BoardsService에서 BoardRepository 대신 Repository<Board> 타입으로 boardRepository를 주입받고 계시기 때문에 나타나는 문제 같습니다.

BoardsService에서 createBoard 메소드를 호출할 때 BoardRepository에 선언된 createBoard 메소드를 사용하고 싶으시다면, BoardRepository를 서비스에 주입해 주셔야 합니다. 아래와 같이 BoardsService에서 BoardRepository를 주입받도록 코드를 변경해 주세요.

// boards.service.ts

import { Injectable, NotFoundException } from '@nestjs/common';
import { BoardStatus } from './board-status.enum';
import { CreateBoardDto } from './dto/create-board.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { BoardRepository } from './board.repository'; // 이 부분을 추가하셨네요

@Injectable()
export class BoardsService {
  constructor(
    @InjectRepository(BoardRepository) private boardRepository: BoardRepository, // 변경된 부분
  ) {}

  createBoard(createBoardDto: CreateBoardDto): Promise<Board> {
    return this.boardRepository.createBoard(createBoardDto);
  }

  // ...기타 메소드들
}

@InjectRepository 데코레이터를 사용해 BoardRepository를 주입받아야 합니다. 이렇게 변경하신 후에 기능이 정상적으로 작동하는지 확인해 보시기 바랍니다.

TypeORM과 NestJS에 대한 추가 정보가 필요하시다면 공식 문서를 참조하시는 것도 좋은 방법입니다:
- NestJS TypeORM Integration: https://docs.nestjs.com/techniques/database
- TypeORM Repository API: https://typeorm.io/#/repository-api

도움이 필요하시다면 언제든 문의주세요. 화이팅입니다!

Min.e님의 프로필 이미지
Min.e

작성한 질문수

질문하기