@bm629/nest-ioredis v1.1.3
Description
Installation
$ npm i --save @bm629/nest-ioredis ioredisUsage
Import IORedis Module
// database.module.ts
@Module({
  imports: [
    IORedisModule.forRoot({
      host: 'localhost',
      port: 6379,
      connectionName: 'cacheRedisClient',
    }),
  ],
})
@Global()
export class DatabaseModule {}Import Database module in AppModule
// app.module.ts
@Module({
  imports: [DatabaseModule],
  controllers: [CatsController],
  providers: [CatSevice],
})
export class AppModule {}Inject Redis client
// cat.service.ts
export class CatService {
  contructor(@InjectIORedisClient('cacheRedisClient') private readonly redisClient: IORedis.Redis) {}
}Async Options
Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use forRootAsync() method, that provides a couple of various ways to deal with async data.
1. Use factory
IORedisModule.forRootAsync({
  useFactory: () => ({
    host: 'localhost',
    port: 6379,
  }),
});Obviously, our factory behaves like every other one (might be async and is able to inject dependencies through inject).
IORedisModule.forRootAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    host: configService.getString('REDIS_HOST'),
    port: configService.get('REDIS_PORT'),
  }),
  inject: [ConfigService],
}),2. Use class
IORedisModule.forRootAsync({
  useClass: IORedisConfigService,
});Above construction will instantiate IORedisConfigService inside IORedisModule and will leverage it to create options object.
class IORedisConfigService implements IORedisOptionsFactory {
  createIORedisOptions(): IORedisModuleOptions {
    return {
      host: 'localhost',
      port: 6379,
    };
  }
}3. Use existing
IORedisModule.forRootAsync({
  imports: [ConfigModule],
  useExisting: ConfigService,
}),It works the same as useClass with one critical difference - IORedisModule will lookup imported modules to reuse already created ConfigService, instead of instantiating it on its own.
For more information, see test cases. You can find details in the __tests__/ folder of this repository.
