작성
·
314
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
도움이 필요하시다면 언제든 문의주세요. 화이팅입니다!