Fai*_*wen 20 javascript node.js 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){}
Run Code Online (Sandbox Code Playgroud)
我得到这个嵌套错误:
[Nest] 11592 - 2018-8-13 11:42:17 [ExceptionHandler] Nest无法解析PlayersService(+ ,?)的依赖关系.请确保索引[1]的参数在当前上下文中可用.
两个模块都导入了app.module.ts.这两项服务都在他们的模块中单独工作.
Kim*_*ern 44
您必须ItemsService在提供它的模块中导出:
@Module({
controllers: [ItemsController],
providers: [ItemsService],
exports: [ItemsService]
^^^^^^^^^^^^^^^^^^^^^^^
})
export class ItemsModule {}
Run Code Online (Sandbox Code Playgroud)
然后在使用该服务的模块中导入它:
@Module({
controllers: [PlayersController],
providers: [PlayersService],
imports: [ItemsModule]
^^^^^^^^^^^^^^^^^^^^^^
})
export class PlayersModule {}
Run Code Online (Sandbox Code Playgroud)
小智 42
假设您想在我的 TaskModule 控制器中使用 AuthModule 中的 AuthService
为此,您需要从 AuthModule 导出 authService
@Module({
imports: [
....
],
providers: [AuthService],
controllers: [AuthController],
exports:[AuthService]
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)
然后在TaskModule中,需要导入AuthModule(注意:导入AuthModule而不是TaskModule中的AuthService)
@Module({
imports:[
AuthModule
],
controllers: [TasksController],
providers: [TasksService]
})
export class TasksModule {}
Run Code Online (Sandbox Code Playgroud)
现在您应该能够在 TaskController 中使用 DI
@Controller('tasks')
export class TasksController {
constructor(private authService: AuthService) {}
...
}
Run Code Online (Sandbox Code Playgroud)
小智 16
金·科恩 (Kim Kern) 回答了这个问题。但我只是想提醒阅读此评论的人们。每当出现此错误时,您应该按照以下步骤操作,这些步骤可以帮助您轻松找出卡住的位置:
例如,您有包含类别服务的类别模块,发布模块有发布服务,并且它有类别服务作为依赖项:
@Module({
controllers: [CategoryController],
providers: [CategoryService],
exports: [CategoryService] // Remember to export
})
export class CategoryModule {}
Run Code Online (Sandbox Code Playgroud)
和
@Module({
imports: [CategoryModule], // Make sure you imported the module you are using
controllers: [PostController],
providers: [PostService]
})
export class PostModule {}
Run Code Online (Sandbox Code Playgroud)
不要忘记使用这个注释。Nest 使用它来检测单例类。在Spring Boot-Java中,这个曾经被称为Bean。阅读更多:
@Injectable()
export class PostService {
constructor(private readonly categoryService: CategoryService // This will be auto injected by Nestjs Injector) {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8423 次 |
| 最近记录: |