Javascript 从另一个模块注入nestjs服务
我有一个Javascript 从另一个模块注入nestjs服务,javascript,node.js,typescript,dependency-injection,nestjs,Javascript,Node.js,Typescript,Dependency Injection,Nestjs,我有一个PlayersModule和一个ItemsModule 我想使用PlayersService中的ItemsService 当我通过注射添加它时: import { Injectable } from '@nestjs/common'; import { InjectModel } from 'nestjs-typegoose'; import { ModelType, Ref } from 'typegoose'; import { Player } from './player.mod
PlayersModule
和一个ItemsModule
我想使用PlayersService
中的ItemsService
当我通过注射添加它时:
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){}
从'@nestjs/common'导入{Injectable};
从“nestjs typegoose”导入{InjectModel};
从“typegoose”导入{ModelType,Ref};
从“/Player.model”导入{Player};
从“../items/Item.model”导入{Item};
从“../items/items.service”导入{ItemsService};
@可注射()
出口级播放机服务{
建造师(
@InjectModel(播放器)专用只读播放器Model:ModelType,
私有只读项服务:项服务){}
我得到这个嵌套错误:
[Nest]11592-2018-8-13 11:42:17[ExceptionHandler]Nest不能
解析PlayerService(+,?)的依赖项。请确保
索引[1]处的参数在当前上下文中可用
这两个模块都导入到
app.module.ts
中。这两个服务在其模块中单独工作。您必须导出提供它的模块中的项目服务
:
@Module({
controllers: [ItemsController],
providers: [ItemsService],
exports: [ItemsService]
^^^^^^^^^^^^^^^^^^^^^^^
})
export class ItemsModule {}
然后在使用服务的模块中导入导出模块:
@Module({
controllers: [PlayersController],
providers: [PlayersService],
imports: [ItemsModule]
^^^^^^^^^^^^^^^^^^^^^^
})
export class PlayersModule {}
⚠️ 不要将同一个提供程序添加到多个模块。请导出提供程序,然后导入模块。⚠️ 我相信您遇到了与我相同的问题。我的场景是两个需要使用彼此服务的同级自定义模块(用户、身份验证)。我使用循环DI解决了这个问题。请检查这个
让我知道它是否解决了您的问题,也许我可以进一步建议您。我通过从传递导出服务的构造函数中的参数中删除
@Inject()
解决了我的问题。通过更改导入@Inject()中使用的常量字符串(令牌)的方式解决了我的问题)我的提供者…小心使用index.ts,从module.ts导出*,nest不会解决依赖关系我使用@KimKern的建议,仍然看到注入服务无法识别的错误。尝试导入服务本身,结果导入模块本身成功。谢谢you@nasta你还需要我吗将服务导入PlayerService?即import{ItemsService}来自“../items/items.service”;
。此外,我们在构造函数中是否使用了某种装饰器?@Inject private readonly itemsService:itemsService
@baku是的,您需要js导入。请看这个答案@Hector我不确定我是否完全理解您的用例,但我有两个想法:您可以定义常规js类,然后只在需要的地方创建它们(->不可能注入)。此外,还有全局模块,只需要导入一次(另请参阅)如果这没有帮助,考虑打开一个新的问题,并向它添加更多的细节,最好是一个解释你的场景的最小代码片段。我认为这个问题仅仅是因为服务没有导出,它不同于角度。