Skip to content

Commit 40fe354

Browse files
Bugfix nestjs#187, update express nestjs#206
1 parent 720f04b commit 40fe354

5 files changed

Lines changed: 55 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
12
## 4.1.4
23
- **common**: remove deprecated `@ExceptionFilters()` decorator
4+
- **core**: update to latest **express* version (4.16.2)
35

46
## 4.1.3
57
- **core**: forward reference bugfixes & security updates

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"@nestjs/websockets": "^4.0.0",
5151
"cli-color": "^1.1.0",
5252
"engine.io-client": "^3.1.1",
53-
"express": "^4.14.0",
53+
"express": "^4.16.2",
5454
"fast-safe-stringify": "^1.2.0",
5555
"iterare": "0.0.8",
5656
"json-socket": "^0.2.1",

src/core/nest-application.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
1-
import iterate from 'iterare';
2-
import { MiddlewaresModule } from './middlewares/middlewares-module';
3-
import { SocketModule } from '@nestjs/websockets/socket-module';
4-
import { NestContainer } from './injector/container';
5-
import { ExpressAdapter } from './adapters/express-adapter';
6-
import { RoutesResolver } from './router/routes-resolver';
1+
import {
2+
CanActivate,
3+
ExceptionFilter,
4+
NestInterceptor,
5+
OnModuleDestroy,
6+
PipeTransform,
7+
WebSocketAdapter
8+
} from '@nestjs/common';
9+
import { INestApplication, INestMicroservice, OnModuleInit } from '@nestjs/common';
710
import { Logger } from '@nestjs/common/services/logger.service';
8-
import { messages } from './constants';
11+
import { isNil, isUndefined, validatePath } from '@nestjs/common/utils/shared.utils';
12+
import { MicroserviceConfiguration } from '@nestjs/microservices';
913
import { MicroservicesModule } from '@nestjs/microservices/microservices-module';
10-
import { Resolver } from './router/interfaces/resolver.interface';
11-
import { INestApplication, INestMicroservice, OnModuleInit } from '@nestjs/common';
14+
import { SocketModule } from '@nestjs/websockets/socket-module';
15+
import iterate from 'iterare';
16+
import { ExpressAdapter } from './adapters/express-adapter';
1217
import { ApplicationConfig } from './application-config';
13-
import { validatePath, isNil, isUndefined } from '@nestjs/common/utils/shared.utils';
14-
import { MicroserviceConfiguration } from '@nestjs/microservices';
18+
import { messages } from './constants';
1519
import { NestMicroservice } from './index';
16-
import { WebSocketAdapter, OnModuleDestroy, ExceptionFilter, PipeTransform, NestInterceptor, CanActivate } from '@nestjs/common';
20+
import { NestContainer } from './injector/container';
1721
import { Module } from './injector/module';
22+
import { MiddlewaresModule } from './middlewares/middlewares-module';
23+
import { Resolver } from './router/interfaces/resolver.interface';
24+
import { RoutesResolver } from './router/routes-resolver';
1825

1926
export class NestApplication implements INestApplication {
2027
private readonly config = new ApplicationConfig();
@@ -61,6 +68,7 @@ export class NestApplication implements INestApplication {
6168
const instance = new NestMicroservice(this.container, config);
6269
instance.setupListeners();
6370
instance.setIsInitialized(true);
71+
instance.setIsInitHookCalled(true);
6472

6573
this.microservices.push(instance);
6674
return instance;
@@ -180,4 +188,4 @@ export class NestApplication implements INestApplication {
180188
private hasOnModuleDestroyHook(instance): instance is OnModuleDestroy {
181189
return !isUndefined((instance as OnModuleDestroy).onModuleDestroy);
182190
}
183-
}
191+
}

src/core/nest-microservice.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Server } from '@nestjs/microservices/server/server';
77
import { MicroserviceConfiguration } from '@nestjs/microservices/interfaces/microservice-configuration.interface';
88
import { ServerFactory } from '@nestjs/microservices/server/server-factory';
99
import { Transport } from '@nestjs/microservices/enums/transport.enum';
10-
import { INestMicroservice, WebSocketAdapter, CanActivate, PipeTransform, NestInterceptor, ExceptionFilter } from '@nestjs/common';
10+
import { INestMicroservice, WebSocketAdapter, CanActivate, PipeTransform, NestInterceptor, ExceptionFilter, OnModuleInit } from '@nestjs/common';
1111
import { ApplicationConfig } from './application-config';
1212
import { SocketModule } from '@nestjs/websockets/socket-module';
1313
import { CustomTransportStrategy } from '@nestjs/microservices';
@@ -22,6 +22,7 @@ export class NestMicroservice implements INestMicroservice {
2222
private readonly server: Server & CustomTransportStrategy;
2323
private isTerminated = false;
2424
private isInitialized = false;
25+
private isInitHookCalled = false;
2526

2627
constructor(
2728
private container: NestContainer,
@@ -39,9 +40,11 @@ export class NestMicroservice implements INestMicroservice {
3940
public setupModules() {
4041
SocketModule.setup(this.container, this.config);
4142
MicroservicesModule.setupClients(this.container);
43+
4244
this.setupListeners();
45+
this.setIsInitialized(true);
4346

44-
this.isInitialized = true;
47+
!this.isInitHookCalled && this.callInitHook();
4548
}
4649

4750
public setupListeners() {
@@ -88,12 +91,37 @@ export class NestMicroservice implements INestMicroservice {
8891
this.isTerminated = isTerminaed;
8992
}
9093

94+
public setIsInitHookCalled(isInitHookCalled: boolean) {
95+
this.isInitHookCalled = isInitHookCalled;
96+
}
97+
9198
private closeApplication() {
9299
SocketModule.close();
100+
93101
this.callDestroyHook();
94102
this.setIsTerminated(true);
95103
}
96104

105+
private callInitHook() {
106+
const modules = this.container.getModules();
107+
modules.forEach((module) => {
108+
this.callModuleInitHook(module);
109+
});
110+
this.setIsInitHookCalled(true);
111+
}
112+
113+
private callModuleInitHook(module: Module) {
114+
const components = [...module.routes, ...module.components];
115+
iterate(components).map(([key, {instance}]) => instance)
116+
.filter((instance) => !isNil(instance))
117+
.filter(this.hasOnModuleInitHook)
118+
.forEach((instance) => (instance as OnModuleInit).onModuleInit());
119+
}
120+
121+
private hasOnModuleInitHook(instance): instance is OnModuleInit {
122+
return !isUndefined((instance as OnModuleInit).onModuleInit);
123+
}
124+
97125
private callDestroyHook() {
98126
const modules = this.container.getModules();
99127
modules.forEach((module) => {

src/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"compile": "tsc -p tsconfig.json"
99
},
1010
"dependencies": {
11-
"express": "4.14.0",
11+
"express": "4.16.2",
1212
"iterare": "0.0.8"
1313
},
1414
"peerDependencies": {

0 commit comments

Comments
 (0)