使用ClientsModule.registerAsync()时,无法访问从共享模块提供的模块导出的服务

朱利安·梅特拉

上下文是我创建了一个共享的配置模块,该模块导入了多个配置模块,每个配置模块都在导出自己的服务,该共享模块导出了每个导入的模块,目前在我的应用程序中,我有一个应用程序模块可以导入共享的配置模块和导入共享配置模块的身份验证模块。

在该项目中,我正在使用nestjs微服务,并且尝试注册ClientsModulewithregisterAsync方法来访问我的身份验证模块中的身份验证配置服务。

目录架构:

/**
config/  
  - shared-config.module.ts
  - app/
     - app-config.service.ts
     - app-config.module.ts
  - auth/
     - auth-config.service.ts
     - auth-config.module.ts
  ... other config modules
- auth/
   - auth.module.ts
- app/
   - app.module.ts
*/

shared-config.module.ts:

@Module({
  imports: [AppConfigModule, MicroServiceAuthConfigModule, /* and other modules */],
  export: [AppConfigModule, MicroServiceAuthConfigModule, /* and other modules */]
})
export class SharedConfigModule {}

auth-config.module.ts:

@Module({
    imports: [
        ConfigModule.forRoot({
           ... some config
        }),
    ],
    providers: [MicroServiceAuthConfigService],
    exports: [MicroServiceAuthConfigService],
})
export class MicroServiceAuthConfigModule {}

问题是,我试图使用MicroServiceAuthConfigService创建ClientsModule的我AuthModule

auth.module.ts:

@Module({
  imports: [
    SharedConfigModule,
    ClientsModule.registerAsync([
      {
        name: 'AUTH_PACKAGE',
        inject: [MicroServiceAuthConfigService],
        useFactory: (authConfigService: MicroServiceAuthConfigService) => ({
          transport: Transport.GRPC,
          options: {
            url: authConfigService.url,
            package: authConfigService.package,
            protoPath: authConfigService.protoPath,
          },
        }),
      },
    ]),
  ],
  controllers: [AuthController],
  providers: [AuthService],
})
export class AuthModule {}

app.module.ts:

@Module({
  imports: [AuthModule, SharedConfigModule],
})
export class AppModule {}

因为我已经导入了SharedConfigModule,所以我应该访问中的MicroServiceAuthConfigService,useFactory但是却出现以下错误:

Nest无法解析AUTH_PACKAGE(?)的依赖项。请确保在ClientsModule上下文中,索引为[0]的参数MicroServiceAuthConfigService可用。

潜在的解决方案:

  • 如果MicroServiceAuthConfigService是提供程序,它是否是当前ClientsModule的一部分?
  • 如果MicroServiceAuthConfigService是从单独的@Module导出的,那么该模块是否在ClientsModule中导入?@Module({imports:[/ *包含MicroServiceAuthConfigService的模块* /]})

奇怪的是,在我的应用程序模块中,我已经注入,SharedConfigModule并且main.ts正在使用我的文件并且该文件正在app.get(MicroServiceAuthConfigService)运行。

那我在做什么错?

杰伊·麦克多尼尔

在您中,ClientsModule.registerAsync您需要添加imports具有包含导出MicroServiceAuthConfigService提供程序模块的数组的数组看起来您特别需要

@Module({
  imports: [
    SharedConfigModule,
    ClientsModule.registerAsync([
      {
        name: 'AUTH_PACKAGE',
        imports: [MicroServiceAuthConfigModule],
        inject: [MicroServiceAuthConfigService],
        useFactory: (authConfigService: MicroServiceAuthConfigService) => ({
          transport: Transport.GRPC,
          options: {
            url: authConfigService.url,
            package: authConfigService.package,
            protoPath: authConfigService.protoPath,
          },
        }),
      },
    ]),
  ],
  controllers: [AuthController],
  providers: [AuthService],
})
export class AuthModule {}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Ear / EJB / Web模块时,Glassfish 4.1无法运行RestFul服务

IllegalAccessException:无法访问类C(在模块M中),因为模块M不会将C导出到模块N

java.lang.IllegalAccessError:无法访问类,因为模块不会导出到未命名的模块

尝试使用Webpack构建AMD模块—出现“无法解析模块'导出'”错误

提供了服务接口,但未在模块信息类中导出或使用警告

从模块导出的角度组件无法在另一个模块中使用

在模块中使用导出的组件

使用实现而不是编译时无法访问库模块依赖项

在Nest.js中创建动态模块时,我应该使用registerAsync还是forRootAsync?

未捕获的SyntaxError:当我导出和导入类时,无法在模块外使用import语句

访问impl模块时获取“使用未声明的类型或模块”

尝试使用pthreads访问共享数据阵列时无法访问错误的内存地址

在AngularJS中使用.controller方法时无法访问$ location

使用Spring Security的hasPermission时无法访问页面

使用WCF时无法访问Elmah错误日志

使用共享模块(在单独的模块之间)

无法访问或使用Node的fs模块

使用2个相同子网时,OpenVPN客户端无法访问OpenVPN服务器端LAN

在引用模块的导出名称时,导入如何与节点模块一起使用?

使用cython.inline时无法访问的代码

使用公钥无法访问远程服务器

使用模块导出之外的函数

当我使用 Windows 服务运行我的网站时,我无法访问 wwwroot 中的 index.html

尝试在 Angular 9 中使用共享模块时出错,使我的组件无法识别我的材料模块

使用反应的语法时,导出的模块返回未定义

使用类时无法访问for循环内创建的变量

使用 | 时无法访问属性

使用导入/导出模块时出现“ReferenceError:未定义”

使用第三方模块时,terraform init 无法获取来自 terraform 提供者镜像的模块

TOP 榜单

热门标签

归档