다른 모듈에서 nestjs 서비스를 주입합니다.
나 있어PlayersModule
그리고ItemsModule
.
사용하고 싶다ItemsService
에서PlayersService
.
주입으로 추가할 경우:
import { Injectable } from '@nestjs/common';
import { InjectModel } from 'nestjs-typegoose';
import { ModelType, Ref } from 'typegoose';
import { Player } from './player.model';
import { Item } from '../items/item.model';
import { ItemsService } from '../items/items.service';
@Injectable()
export class PlayersService {
constructor(
@InjectModel(Player) private readonly playerModel: ModelType<Player>,
private readonly itemsService: ItemsService){}
다음 네스트 에러가 표시됩니다.
[네스트] 11592 - 2018-8-13 11:42:17 [ExceptionHandler] Nest가 PlayersService(+, ?)의 의존관계를 해결할 수 없습니다.인덱스 [1]의 인수를 현재 컨텍스트에서 사용할 수 있는지 확인하십시오.
양쪽 모듈이 로 Import 됩니다.app.module.ts
두 서비스 모두 모듈에서 단독으로 동작하고 있습니다.
를 내보내야 합니다.ItemsService
를 참조해 주세요.
@Module({
controllers: [ItemsController],
providers: [ItemsService],
exports: [ItemsService]
^^^^^^^^^^^^^^^^^^^^^^^
})
export class ItemsModule {}
그런 다음 서비스를 사용하는 모듈의 내보내기 모듈을 Import합니다.
@Module({
controllers: [PlayersController],
providers: [PlayersService],
imports: [ItemsModule]
^^^^^^^^^^^^^^^^^^^^^^
})
export class PlayersModule {}
⚠13 여러 모듈에 동일한 공급자를 추가하지 마십시오.공급자를 내보내고 모듈을 가져옵니다.⚠️
TaskModule의 컨트롤러에서 AuthModule의 AuthService를 사용한다고 가정합니다.
이를 위해서는 AuthModule에서 authService를 내보내야 합니다.
@Module({
imports: [
....
],
providers: [AuthService],
controllers: [AuthController],
exports:[AuthService]
})
export class AuthModule {}
다음으로 TaskModule에서 AuthModule을 Import해야 합니다(주의: TaskModule의 AuthService가 아닌 AuthModule을 Import합니다).
@Module({
imports:[
AuthModule
],
controllers: [TasksController],
providers: [TasksService]
})
export class TasksModule {}
이제 TaskController에서 DI를 사용할 수 있습니다.
@Controller('tasks')
export class TasksController {
constructor(private authService: AuthService) {}
...
}
그 질문은 Kim Kern에 의해 답변되었다.하지만 나는 이 댓글을 읽는 사람들에게 상기시켜주고 싶다.이 에러가 발생하는 경우는, 다음의 순서에 따라서, 막혀 있는 장소를 간단하게 특정할 수 있습니다.
- 공급자를 제공하는 모듈이 Import되었는지 확인합니다.
- 사용하고 있는 프로바이더가 export 되어 있는 것을 확인합니다.
예를 들어 카테고리 서비스를 포함하는 카테고리 모듈이 있고 포스트 모듈은 포스트 서비스를 포함하며 카테고리 서비스는 종속 서비스입니다.
@Module({
controllers: [CategoryController],
providers: [CategoryService],
exports: [CategoryService] // Remember to export
})
export class CategoryModule {}
그리고.
@Module({
imports: [CategoryModule], // Make sure you imported the module you are using
controllers: [PostController],
providers: [PostService]
})
export class PostModule {}
이 주석을 사용하는 것을 잊지 마세요.Nest는 이를 사용하여 싱글톤클래스를 검출합니다.spring boot - Java 에서는, 이것은 Bean이라고 불리고 있었습니다.상세보기:
@Injectable()
export class PostService {
constructor(private readonly categoryService: CategoryService // This will be auto injected by Nestjs Injector) {}
}
나는 내 문제를 해결했다.@Inject()
내보내기된 서비스를 전달하고 있는 컨스트럭터의 인수에서 제외됩니다.
당신도 나와 같은 문제에 직면했다고 생각해요.제 시나리오는 서로의 서비스를 사용해야 하는 2개의 형제 커스텀 모듈(사용자, 인증)이었습니다.원형 DI를 사용하여 해결했습니다. 이 링크를 확인하십시오.
문제가 해결됐는지 알려주시면 제가 더 조언해 드릴 수 있을 것 같습니다.
프로바이더의 @Inject()에서 사용되는 상수 문자열(TOKEN) Import 방법을 변경하여 문제를 해결했습니다.module.ts에서 index.ts 내보내기* 를 사용해도 nest는 의존관계를 해결할 수 없습니다.
Kim Kern의 답변에 따르면, 현재 서비스에는 데코레이터 없이 주입된 서비스만 추가해야 합니다(@Inject()는 필요 없습니다).그 후에는 올바르게 동작합니다.그것은 나의 실수였고 다른 사람들을 도울 수 있을 것이다.
순서 1순서 2 의 파일을 export 합니다.모듈 전체를 Import 합니다.
처음에 파일을 프로바이더로 추가하고 모듈을 추가하는 실수를 해서 오류가 발생하였습니다.
언급URL : https://stackoverflow.com/questions/51819504/inject-nestjs-service-from-another-module
'programing' 카테고리의 다른 글
SQL Server 2008 Windows 인증 로그인 오류:로그인이 신뢰할 수 없는 도메인입니다. (0) | 2023.04.09 |
---|---|
px, dip, dp, sp의 차이점은 무엇입니까? (0) | 2023.04.09 |
Typescript에서 구성원을 참조할 때 !( 느낌표/bang) 연산자는 무엇입니까? (0) | 2023.04.04 |
WordPress 플러그인:어떻게 하면 '긴밀 커플링'을 피할 수 있을까요? (0) | 2023.04.04 |
데이터 배열을 입력 매개 변수로 오라클 프로시저에 전달 (0) | 2023.04.04 |