nestjs에 폴더가 reservation과 book이 있다고 하자.
각 폴더에는 module, service, controller가 존재한다.
그리고 각각 데이터베이스와 연결한 상황이다.
여기서 우리는 Post를 통해 책을 예약해서 reservation에 저장했다.
book.service.ts에서 reservation.service.ts에 있는 findAll()함수를 사용하고 싶다. 이럴 때 어떻게 하면 사용할 수 있을까?
3단계로 나누어보자.
이렇게 단계로만 보면 무슨 말인지 잘 모르겠으니, 만들어서 설명해드리겠습니다.
http://localhost:3000/books
으로 접속하면,
//books.controller
@Get()
findAll() {
return this.booksService.findAll();
}
//books.service
findAll() {
return `This action returns all books`;
}
이렇게 출력이 된다.
우리는 http://localhost:3000/books
에 들어갔을 때 reservation에 있는 findAll을 출력하려고 한다.
//books.controller
@Get()
findAll() {
return this.booksService.findAll();
}
//reservation.service
findAll() {
return `This action returns all reservations`;
}
이제 방법을 차근차근 알아보자.
단계는 그냥 편의상 나눈 것이고 어느단계부터 해도 된다!
우선 reservation.module에 가보자.
@Module({
controllers: [ReservationsController],
providers: [ReservationsService],
})
export class ReservationsModule {}
기본형이다. nestjs는 기본적으로 자동으로 다 만들어 주니까 이런 형식으로 있을 것이다.
여기서 우리는 Module에 exports라는 것을 붙여줄 것이다.
@Module({
controllers: [ReservationsController],
providers: [ReservationsService],
exports: [ReservationsService],
})
export class ReservationsModule {}
exports는 내보내는 것으로 이 파일에 있는 것을 다른 파일에서도 사용할 수 있게 내보내는 것이다.
내보냈으니 이제 받아야 사용할 수 있을 것이다.
사용하고 싶은 곳인 book.module에 가보자.
@Module({
controllers: [BooksController],
providers: [BooksService]
})
export class BooksModule {}
여기도 기본형이다.
우리는 여기서 imports로 모듈을 가져온다.
@Module({
imports: [ReservationsModule],
controllers: [BooksController],
providers: [BooksService],
})
export class BooksModule {}
1,2 단계를 통해서 우리는 사용하고 싶은 함수를 받아올 수 있는 길을 만들었다.
이제 적용시켜보자.
//books.service
@Injectable()
export class BooksService {
constructor(private reservationsService: ReservationsService) {}
findAll() {
return this.reservationsService.findAll();
//return `This action returns all books`;
}
}
우리는 reservations.Service에 있는 findAll() 함수를 사용하고 싶었던 거니까 위와 같이 작성해주면 이제 다른 곳에 있는 함수를 가져다가 사용할 수 있게 된다.
constructor에 사용할 service를 명하고 사용할 때는 this. 을 붙여서 사용하고 싶은 함수를 꺼내서 사용한다.
만약에 위 단계중 하나라도 안하면 아래와 같은 에러 메세지가 나온다.
Nest can't resolve dependencies of the ####Service.
Please make sure that the argument #####Service at index [0] is available in the ####Module context.