Skip to content

Commit ba33c21

Browse files
committed
feat: enhance NestJS Redis example with configuration and delete functionality
1 parent 5979f09 commit ba33c21

File tree

9 files changed

+126
-170
lines changed

9 files changed

+126
-170
lines changed

examples/nest-redis-example/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"dependencies": {
2323
"@nestjs-labs/nestjs-redis": "workspace:^",
2424
"@nestjs/common": "11.0.1",
25+
"@nestjs/config": "^4.0.2",
2526
"@nestjs/core": "11.0.1",
2627
"@nestjs/platform-express": "^11.0.1",
2728
"redis": "^5.6.0",

examples/nest-redis-example/src/app.controller.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Body, Controller, Get, Post, Query } from '@nestjs/common';
1+
import { Body, Controller, Delete, Get, Post, Query } from '@nestjs/common';
22
import { AppService } from './app.service';
33

44
@Controller()
@@ -25,4 +25,9 @@ export class AppController {
2525
async getKey(@Query('key') key: string) {
2626
return await this.appService.getKey(key);
2727
}
28+
29+
@Delete('delete-key')
30+
async deleteKey(@Body('key') key: string) {
31+
return await this.appService.deleteKey(key);
32+
}
2833
}

examples/nest-redis-example/src/app.module.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
11
import { Module } from '@nestjs/common';
2+
import { ConfigModule, ConfigService } from '@nestjs/config';
23
import { RedisModule } from '@nestjs-labs/nestjs-redis';
34

45
import { AppController } from './app.controller';
56
import { AppService } from './app.service';
67

78
@Module({
89
imports: [
9-
RedisModule.forRoot({
10-
readonly: false,
11-
url: 'redis://localhost:6379',
10+
ConfigModule.forRoot(),
11+
12+
// use root
13+
// RedisModule.forRoot({
14+
// readonly: false,
15+
// url: 'redis://localhost:6379',
16+
// }),
17+
18+
// use factory
19+
RedisModule.forRootAsync({
20+
imports: [ConfigModule],
21+
useFactory: (configService: ConfigService) => {
22+
const url: string = configService.get('REDIS_URL')!;
23+
console.log(url);
24+
return {
25+
url,
26+
isGlobal: true,
27+
};
28+
},
29+
inject: [ConfigService],
1230
}),
1331
],
1432
controllers: [AppController],

packages/node-redis/lib/redis.module.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Module, DynamicModule } from '@nestjs/common';
22

33
import { RedisModuleOptions, RedisModuleAsyncOptions } from './interfaces';
44
import { ConfigurableModuleClass } from './redis.module-definition';
5-
import { createRedisClient } from './redis.providers';
5+
import { createRedisClient, createAsyncProviders } from './redis.providers';
66
import { RedisService } from './redis.service';
77

88
@Module({})
@@ -22,7 +22,14 @@ export class RedisModule extends ConfigurableModuleClass {
2222
return {
2323
global: options?.isGlobal,
2424
...moduleDefinition,
25-
providers: [...(moduleDefinition.providers ?? []), createRedisClient(), RedisService],
25+
providers: [
26+
...(moduleDefinition.providers ?? []),
27+
...createAsyncProviders(options),
28+
createRedisClient(),
29+
RedisService,
30+
...(options.extraProviders ?? [])
31+
],
32+
imports: [...(moduleDefinition.imports ?? []), ...(options.extraImports ?? [])],
2633
exports: [RedisService]
2734
};
2835
}

packages/node-redis/lib/redis.providers.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { Provider } from '@nestjs/common';
1+
import { Provider, Type } from '@nestjs/common';
22
import { createClient, RedisClientType } from 'redis';
33
import { REDIS_CLIENT } from './redis.constants';
44
import { RedisOptions } from './interfaces';
55
import { MODULE_OPTIONS_TOKEN } from './redis.module-definition';
6+
import { RedisModuleAsyncOptions, RedisModuleOptions } from './interfaces';
7+
import { RedisOptionsFactory } from './interfaces/redis-factory.interface';
68

79
export const createRedisClient = (): Provider => ({
810
provide: REDIS_CLIENT,
@@ -13,3 +15,43 @@ export const createRedisClient = (): Provider => ({
1315
},
1416
inject: [MODULE_OPTIONS_TOKEN]
1517
});
18+
19+
export const createAsyncProviders = (options: RedisModuleAsyncOptions): Provider[] => {
20+
if (options.useClass) {
21+
return [
22+
{
23+
provide: options.useClass,
24+
useClass: options.useClass
25+
},
26+
createAsyncOptionsProvider(options)
27+
];
28+
}
29+
30+
if (options.useExisting || options.useFactory) return [createAsyncOptionsProvider(options)];
31+
32+
return [];
33+
};
34+
35+
export const createAsyncOptionsProvider = (options: RedisModuleAsyncOptions): Provider => {
36+
if (options.useFactory) {
37+
return {
38+
provide: MODULE_OPTIONS_TOKEN,
39+
useFactory: options.useFactory,
40+
inject: options.inject || []
41+
};
42+
}
43+
44+
const inject: Type<RedisOptionsFactory<RedisModuleOptions>>[] = [];
45+
if (options.useClass) {
46+
inject.push(options.useClass);
47+
} else if (options.useExisting) {
48+
inject.push(options.useExisting);
49+
}
50+
51+
return {
52+
provide: MODULE_OPTIONS_TOKEN,
53+
useFactory: async (optionsFactory: RedisOptionsFactory<RedisModuleOptions>) =>
54+
optionsFactory.createRedisOptions(),
55+
inject,
56+
};
57+
};

packages/node-redis/lib/redis.service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ export class RedisService<
2020
return this.client;
2121
}
2222

23+
/**
24+
* Quit the redis client instance.
25+
*/
2326
async onApplicationShutdown(): Promise<void> {
2427
await this.client.quit();
2528
}

packages/node-redis/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
{
22
"name": "@nestjs-labs/nestjs-redis",
3-
"version": "1.0.0",
3+
"version": "11.0.0",
44
"description": "Redis(node-redis) module for Nest framework (node.js).",
5-
"author": "LiaoLiao <yxiaosong002@gmail.com>",
5+
"author": "Nestjs-labs <h499871809@gmail.com>",
66
"main": "dist/index.js",
77
"types": "dist/index.d.ts",
88
"type": "commonjs",
99
"files": [
10-
"dist"
10+
"dist",
11+
"README.md"
1112
],
1213
"license": "MIT",
1314
"keywords": [

packages/node-redis/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"extends": "../tsconfig.base.json",
33
"compilerOptions": {
4+
"forceConsistentCasingInFileNames": true,
45
"outDir": "dist",
56
"paths": {
67
"@/*": ["./lib/*"]

0 commit comments

Comments
 (0)