Unverified 提交 b6dd9e60 authored 作者: ziyun.zhu's avatar ziyun.zhu 提交者: GitHub

Merge pull request #24 from a-pavlenko/fix/close-connection

fix(connection): close connections onModuleDestroy
import { DynamicModule } from '@nestjs/common';
import { DynamicModule, OnModuleDestroy } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';
import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
export declare class RedisCoreModule {
export declare class RedisCoreModule implements OnModuleDestroy {
private readonly options;
private readonly moduleRef;
constructor(options: RedisModuleOptions | RedisModuleOptions[], moduleRef: ModuleRef);
static register(options: RedisModuleOptions | RedisModuleOptions[]): DynamicModule;
static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule;
onModuleDestroy(): void;
}
......@@ -5,13 +5,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
var RedisCoreModule_1;
const common_1 = require("@nestjs/common");
const core_1 = require("@nestjs/core");
const redis_client_provider_1 = require("./redis-client.provider");
const redis_constants_1 = require("./redis.constants");
const redis_service_1 = require("./redis.service");
let RedisCoreModule = RedisCoreModule_1 = class RedisCoreModule {
constructor(options, moduleRef) {
this.options = options;
this.moduleRef = moduleRef;
}
static register(options) {
return {
module: RedisCoreModule_1,
......@@ -30,12 +41,31 @@ let RedisCoreModule = RedisCoreModule_1 = class RedisCoreModule {
exports: [redis_service_1.RedisService],
};
}
onModuleDestroy() {
const closeConnection = ({ clients, defaultKey }) => options => {
const name = options.name || defaultKey;
const client = clients.get(name);
if (client && !options.keepAlive) {
client.disconnect();
}
};
const redisClient = this.moduleRef.get(redis_constants_1.REDIS_CLIENT);
const closeClientConnection = closeConnection(redisClient);
if (Array.isArray(this.options)) {
this.options.forEach(closeClientConnection);
}
else {
closeClientConnection(this.options);
}
}
};
RedisCoreModule = RedisCoreModule_1 = __decorate([
common_1.Global(),
common_1.Module({
providers: [redis_service_1.RedisService],
exports: [redis_service_1.RedisService],
})
}),
__param(0, common_1.Inject(redis_constants_1.REDIS_MODULE_OPTIONS)),
__metadata("design:paramtypes", [Object, core_1.ModuleRef])
], RedisCoreModule);
exports.RedisCoreModule = RedisCoreModule;
import { DynamicModule, Global, Module } from '@nestjs/common';
import {
DynamicModule,
Global,
Module,
Inject,
OnModuleDestroy,
} from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';
import { RedisModuleAsyncOptions, RedisModuleOptions } from './redis.interface';
import {
createAsyncClientOptions,
createClient,
RedisClient,
} from './redis-client.provider';
import { REDIS_MODULE_OPTIONS } from './redis.constants';
import { REDIS_MODULE_OPTIONS, REDIS_CLIENT } from './redis.constants';
import { RedisService } from './redis.service';
@Global()
......@@ -13,7 +21,13 @@ import { RedisService } from './redis.service';
providers: [RedisService],
exports: [RedisService],
})
export class RedisCoreModule {
export class RedisCoreModule implements OnModuleDestroy {
constructor(
@Inject(REDIS_MODULE_OPTIONS)
private readonly options: RedisModuleOptions | RedisModuleOptions[],
private readonly moduleRef: ModuleRef,
) {}
static register(
options: RedisModuleOptions | RedisModuleOptions[],
): DynamicModule {
......@@ -35,4 +49,24 @@ export class RedisCoreModule {
exports: [RedisService],
};
}
onModuleDestroy() {
const closeConnection = ({ clients, defaultKey }) => options => {
const name = options.name || defaultKey;
const client = clients.get(name);
if (client && !options.keepAlive) {
client.disconnect();
}
};
const redisClient = this.moduleRef.get<RedisClient>(REDIS_CLIENT);
const closeClientConnection = closeConnection(redisClient);
if (Array.isArray(this.options)) {
this.options.forEach(closeClientConnection);
} else {
closeClientConnection(this.options);
}
}
}
......@@ -21,6 +21,7 @@
},
"dependencies": {
"@nestjs/common": "6.3.1",
"@nestjs/core": "^6.6.7",
"@types/ioredis": "^4.0.4",
"@types/uuid": "^3.4.4",
"ioredis": "^4.2.0",
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论