在Nest.js中导入nest-mqtt

问题描述 投票:0回答:1

我想在我的 Nest.js 应用程序中创建基于配置模块的 MQTT 连接。我正在使用非常旧的 npm 包:https://github.com/microud/nest-mqtt。我更新了必要的依赖项,现在我尝试使用它。但是我遇到了这个问题:

Error: Nest cant resolve dependencies of the MQTT_OPTION_PROVIDER (?). Please make sure that the argument ConfigurationService at index [0] is available in the MqttModule context.

这是我的 app.module 的外观:

@Module({
  imports: [ConfigurationModule, MySQLModule, MQTTModule],
  controllers: [],
  providers: [],
})
export class AppModule {}

config.module.ts

@Module({
  imports: [ConfigModule.forRoot()],
  providers: [ConfigurationService],
  exports: [ConfigurationService],
})
export class ConfigurationModule {}

mqtt.module.ts

const MqttGlobalConnection = MqttModule.forRootAsync({
  useFactory: (config: ConfigurationService) => ({
    logger: {
      useValue: new CustomLogger('MQTT'),
    },
    ...config.MQTT_GLOBAL_CONNECTION,
  }),
  inject: [ConfigurationService],
  imports: [ConfigurationModule],
});

@Module({
  imports: [ConfigurationModule, MqttGlobalConnection],
})
export class MQTTModule {}

这个非常简单的配置是否有问题,或者错误出在 Nest-mqtt 库中。

PS 当我将 forRootAsync 更改为 forRoot 时,一切似乎都正常,但在我看来看起来有点糟糕:

const MqttGlobalConnection = MqttModule.forRoot({
  logger: { useValue: new CustomLogger('MQTT') },
  ...new ConfigurationService(new ConfigService()).MQTT_GLOBAL_CONNECTION,
});
dependency-injection nestjs
1个回答
0
投票

问题出在包装本身。我将它与我正在使用的其他软件包进行了比较,并发现了一些东西。在 forRootAsync 方法的包内,缺少“import”行。

public static forRootAsync(options: MqttModuleAsyncOptions): DynamicModule {
    return {
      module: MqttModule,
      providers: [
        ...createOptionProviders(options),
        createLoggerProvider(options),
        createClientProvider(),
        MqttExplorer,
        MqttService,
      ],
      imports: options.imports || [],
    };
  }

一旦我添加了它,一切就开始正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.