board.service.ts 에서 아래와 같이 다른 서비스를 이용하려니까 발생한 문제
@Injectable()
export class BoardService {
constructor(
private readonly hashtagService: HashtagService,
private readonly categoryService: CategoryService,
private readonly boardToCategoryService: BoardToCategoryService,
private readonly hashtagToBoardService: HashtagToBoardService,
@InjectRepository(Board)
private readonly boardRepository: Repository<Board>,
) {}
에러문구
ERROR [ExceptionHandler] Nest can't resolve dependencies of the BoardService (HashtagService, CategoryService, ?, HashtagToBoardService, BoardRepository). Please make sure that the argument BoardToCategoryService at index [2] is available in the BoardModule context.
Potential solutions:
- Is BoardModule a valid NestJS module?
- If BoardToCategoryService is a provider, is it part of the current BoardModule?
- If BoardToCategoryService is exported from a separate @Module, is that module imported within BoardModule?
@Module({
imports: [ /* the Module containing BoardToCategoryService */ ]
})
해결방식
1. 오류내용을 확인 -> 잘 이해가 안된다.
2. 오류메세지를 구글링 -> module의 imports 부분에 추가를 해주거나 중복된것이 있는지 확인해야 한다고함.
3. 다시 오류메시지 확인
-> 솔류션에 적혀있는 대로 내가 사용하려는 서비스가 BoardModule의 일부분이 아니였다.
오류 코드
import { BoardController } from './board.controller';
import { BoardService } from './board.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Board } from '../../entities/Board.entity';
@Module({
imports: [
TypeOrmModule.forFeature([Board]),
],
controllers: [BoardController],
providers: [BoardService],
})
export class BoardModule {}
해결한 코드
import { BoardController } from './board.controller';
import { BoardService } from './board.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Board } from '../../entities/Board.entity';
import { HashtagModule } from '../hashtag/hashtag.module';
import { HashtagToBoardModule } from '../hashtag_board/hashtagToBoard.module';
import { BoardToCategoryModule } from '../board_category/boardToCategory.module';
import { CategoryModule } from '../category/category.module';
@Module({
imports: [
TypeOrmModule.forFeature([Board]),
CategoryModule,
HashtagModule,
BoardToCategoryModule,
HashtagToBoardModule,
],
controllers: [BoardController],
providers: [BoardService],
exports: [BoardService],
})
export class BoardModule {}
< 추가로 설정해야하는 부분 >
imports 한 각 module에 내가 사용할 service를 exports 해줘야한다.
예시
import { Module } from '@nestjs/common';
import { ReplyController } from './reply.controller';
import { ReplyService } from './reply.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Reply } from '../../entities/entity.index';
@Module({
imports: [TypeOrmModule.forFeature([Reply])],
controllers: [ReplyController],
providers: [ReplyService],
exports: [ReplyService], // <--- 이 부분을 써줘야 다른 곳에서 서비스 사용가능
})
export class ReplyModule {}
마치 app.module.ts 에서 내가 만든 서비스를 사용하기 위해서 다른 모듈을 다 imports에 넣듯이
여기서도 같은 원리로 내가 원하는 서비스를 포함하는 모듈을 imports에 넣으면 되는 것이였다.