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

하리님의 프로필 이미지
하리

작성한 질문수

따라하며 배우는 NestJS

게시물 생성하기

레퍼지토리 문제..해결하신 분 도와주세요 ㅠㅠ..

작성

·

1.2K

0

강의에서 나오는 버전이 달라서 생기는 문제로 일단 파악은 되었지만 인터넷등 댓글에 있는 방법으로 시도해봤지만, 저는 해결되지 않아서 질문글 남깁니다 ㅠㅠ

 

우선 제가 마지막으로 했던 방법은 BoardsModule 파일에서 forFeature([BoardRepository->Board로 변경하고

@Module({
  imports: [TypeOrmModule.forFeature([Board])],
  controllers: [BoardsController],
  providers: [BoardsService, BoardRepository],
})
export class BoardsModule {}

 

BoardService 파일에서 @InjecRepository(BoardRepository)를 Board entity로 변경하면 된다는 글을 보고 따라했지만,

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

 

포스트맨으로 직접 실행하기전에는 서버가 잘 실행되도, 포스트맨으로 호출하면 아래와 같은 오류가 나옵니다..

[Nest] 14464  - 2023. 05. 23. 오전 12:51:47   ERROR [ExceptionsHandler] this.boardRepository.createBoard is not a function
TypeError: this.boardRepository.createBoard is not a function
    at BoardsService.createBoard (C:\nestStudy\nestjs-board-app\src\boards\boards.service.ts:42:33)
    at BoardsController.createBoard (C:\nestStudy\nestjs-board-app\src\boards\boards.controller.ts:27:31)
    at C:\nestStudy\nestjs-board-app\node_modules\@nestjs\core\router\router-execution-context.js:38:29
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at C:\nestStudy\nestjs-board-app\node_modules\@nestjs\core\router\router-execution-context.js:46:28
    at C:\nestStudy\nestjs-board-app\node_modules\@nestjs\core\router\router-proxy.js:9:17

 

BoardRepository가 제대로 주입되지 않은 것 같은데 이후 해결방법을 도와주세요 ㅠㅠ 삽질을 그만 멈추고 싶습니다..

답변 5

6

boards.module.ts 파일의 providers에 BoardRepository를 추가해서
providers: [BoardsService, BoardRepository],
이렇게 한번 만들어 보시겠어요?

혹시 이렇게 해도 안되면,
1. typeORM 버전을 낮춘 것은 아닌지, 낮춘 게 맞다면 package.json 파일에서, dependencies의 typeorm 부분을 "typeorm": "^0.3.17",

이렇게 바꾸시고 npm install typeorm @nestjs/typeorm --save 로 다시 설치한 뒤,

2. boards.entity.ts 파일에서
@EntityRepository(Board) 부분을 지우고, 아래와 같이 @Injectable() 데코레이터와 컨스트럭터를 추가해 주세요.

//@EntityRepository(Board)
@Injectable()
export class BoardRepository extends Repository<Board> {
    constructor(dataSource: DataSource) {
        super(Board, dataSource.createEntityManager());
    }
  1. board.service.ts 파일에서 클래스의 컨스트럭터 부분을 아래와 같이 수정해 보세요.

    export class BoardsService {
        constructor(private boardRepository: BoardRepository) {}

1

그리고 마지막으로
4. getBoardById 함수가 쓰고 있는 findOne을 아래와 같이 바꿔야 합니다.

const found = await this.boardRepository.findOne({
            where: { id: id }
        });

0

@CustomRepository(Board)
export class BoardRepository extends Repository<Board> {
  constructor(dataSource: DataSource) {
    super(Board, dataSource.createEntityManager());
  }
}

레포지토리에 생성자를 명시해주세요

0

@InjectRepository(BoardRepository)로 변경해보시겠어요?

0

안녕하세요, 인프런 AI 인턴이에요.

해당 에러 메시지는 boardRepository가 createBoard라는 함수를 가지고 있지 않기 때문에 발생한 것 같습니다. 해당 함수가 정의되어 있는지 확인해보시는 것이 좋을 것 같아요.

만약 함수가 정상적으로 정의되어 있다면, 문제가 될 수 있는 부분은 해당 함수를 호출하는 코드 부분인데, 해당 부분도 확인해보시면 좋을 것 같습니다.

만약 문제가 여전히 해결되지 않는다면, 코드의 전체적인 구조나 에러 메시지의 내용을 더 자세히 설명해주시면 더 도움이 될 것 같아요.

하리님의 프로필 이미지
하리

작성한 질문수

질문하기