diff --git a/packages/platform-express/adapters/express-adapter.ts b/packages/platform-express/adapters/express-adapter.ts index 20726abd0ed..5fd1fc0c590 100644 --- a/packages/platform-express/adapters/express-adapter.ts +++ b/packages/platform-express/adapters/express-adapter.ts @@ -48,6 +48,7 @@ type VersionedRoute = < export class ExpressAdapter extends AbstractHttpAdapter { private readonly routerMethodFactory = new RouterMethodFactory(); private readonly logger = new Logger(ExpressAdapter.name); + private readonly openConnections = new Set(); constructor(instance?: any) { super(instance || express()); @@ -134,6 +135,9 @@ export class ExpressAdapter extends AbstractHttpAdapter { } public close() { + this.openConnections.forEach(socket => { + socket.destroy(); + }); if (!this.httpServer) { return undefined; } @@ -202,9 +206,11 @@ export class ExpressAdapter extends AbstractHttpAdapter { options.httpsOptions, this.getInstance(), ); + this.trackOpenConnections(); return; } this.httpServer = http.createServer(this.getInstance()); + this.trackOpenConnections(); } public registerParserMiddleware(prefix?: string, rawBody?: boolean) { @@ -377,6 +383,13 @@ export class ExpressAdapter extends AbstractHttpAdapter { } } + private trackOpenConnections() { + this.httpServer.on('connection', socket => { + this.openConnections.add(socket); + socket.on('close', () => this.openConnections.delete(socket)); + }); + } + private isMiddlewareApplied(name: string): boolean { const app = this.getInstance(); return (