@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.
