从另一个模块注入nestjs服务

时间:2018-08-13 09:45:36

标签: 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){}

我得到这个嵌套错误:

  

[嵌套] 11592-2018-8-13 11:42:17 [ExceptionHandler] Nest无法   解决PlayersService的依赖项(+ 、?)。请确定   索引[1]的参数在当前上下文中可用。

两个模块均导入app.module.ts中。两种服务都在其模块中单独工作。

5 个答案:

答案 0 :(得分:22)

您必须在提供ItemsService的模块中将其导出:

@Module({
  controllers: [ItemsController],
  providers: [ItemsService],
  exports: [ItemsService]
  ^^^^^^^^^^^^^^^^^^^^^^^
})
export class ItemsModule {}

,然后将其导入使用该服务的模块中:

@Module({
  controllers: [PlayersController],
  providers: [PlayersService],
  imports: [ItemsModule]
  ^^^^^^^^^^^^^^^^^^^^^^
})
export class PlayersModule {}

答案 1 :(得分:2)

let' say you want to use AuthService from AuthModule in my TaskModule's controller 

for that, you need to export authService from AuthModule
@Module({
    imports: [
     ....
    ],
    providers: [AuthService],
    controllers: [AuthController],
    exports:[AuthService]
  })
  export class AuthModule {}
  

  then in TaskModule, you need to import AuthModule (note: import AuthModule not the AuthService in TaskModule)

  @Module({
    imports:[
      AuthModule
    ],
    controllers: [TasksController],
    providers: [TasksService]
  })
  export class TasksModule {}

  Now you should be able to use DI in TaskController
  
  @Controller('tasks')
 export class TasksController {
    constructor(private authService: AuthService) {}
    ...
 }
  

答案 2 :(得分:0)

我认为您遇到了我遇到的同样问题。我的场景是2个需要使用彼此服务的同级自定义模块(用户,身份验证)。我用圆形DI 来解决。请检查此link

让我知道它是否能够解决您的问题,也许我可以进一步为您提供建议。

答案 3 :(得分:0)

我解决了这个问题,我从传递输出服务的构造函数的参数中删除了@Inject()

答案 4 :(得分:0)

通过更改我的提供者的 @Inject()) 中使用的常量字符串 (TOKEN) 的导入方式解决了我的问题......使用 index.ts 时要小心,从 module.ts 导出 *,嵌套不会解决依赖