@bm629/nest-ioredis
v1.1.3
Published
Nestjs library for ioredis client
Downloads
4
Maintainers
Readme
Description
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.