Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从另一个模块注入nestjs服务_Javascript_Node.js_Typescript_Dependency Injection_Nestjs - Fatal编程技术网

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类,然后只在需要的地方创建它们(->不可能注入)。此外,还有全局模块,只需要导入一次(另请参阅)如果这没有帮助,考虑打开一个新的问题,并向它添加更多的细节,最好是一个解释你的场景的最小代码片段。我认为这个问题仅仅是因为服务没有导出,它不同于角度。