@bm629/nest-ioredis
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

npm version Coverage Status License: MIT Build Status

Description

IORedis module for Nest.

Installation

$ npm i --save @bm629/nest-ioredis ioredis

Usage

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.

License

MIT licensed.

Package Sidebar

Install

npm i @bm629/nest-ioredis

Weekly Downloads

1

Version

1.1.3

License

MIT

Unpacked Size

39.5 kB

Total Files

24

Last publish

Collaborators

  • bm629