From dcbc814e6b65a736783cd6c7224d93e37274ebaf Mon Sep 17 00:00:00 2001 From: Nico Date: Mon, 1 Sep 2025 18:34:55 +0200 Subject: [PATCH 1/3] fix: remove event listener declarations to avoid memory leak I removed event listener declaration from the connection script to avoid memory leaks. Instanciating several services including the `moleculer-db-adapter-mongoose` mixin will result on 3 event listeners declared by services, thus, node is emitting a warning on possible memory leak. It's better to let the user instanciate his own event listener to avoid this issue --- packages/moleculer-db-adapter-mongoose/src/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/moleculer-db-adapter-mongoose/src/index.js b/packages/moleculer-db-adapter-mongoose/src/index.js index 7017fc1..6e01a74 100644 --- a/packages/moleculer-db-adapter-mongoose/src/index.js +++ b/packages/moleculer-db-adapter-mongoose/src/index.js @@ -96,11 +96,6 @@ class MongooseDbAdapter { } this.service.logger.info("MongoDB adapter has connected successfully."); - - /* istanbul ignore next */ - this.conn.on("disconnected", () => this.service.logger.warn("Mongoose adapter has disconnected.")); - this.conn.on("error", err => this.service.logger.error("MongoDB error.", err)); - this.conn.on("reconnected", () => this.service.logger.info("Mongoose adapter has reconnected.")); } /** From 3cb9e8987c0a6d2ae7b160a4f0cc542846ca0925 Mon Sep 17 00:00:00 2001 From: Nicolas Polizzo Date: Mon, 1 Sep 2025 18:42:29 +0200 Subject: [PATCH 2/3] remove useless tests --- .../test/unit/index.spec.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js b/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js index b40d8fa..7da10a8 100644 --- a/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js +++ b/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js @@ -170,15 +170,6 @@ if (process.versions.node.split(".")[0] < 14) { ); expect(adapter.db).toBe(fakeDb); - expect(adapter.db.on).toHaveBeenCalledTimes(3); - expect(adapter.db.on).toHaveBeenCalledWith( - "disconnected", - expect.any(Function) - ); - expect(adapter.db.on).toHaveBeenCalledWith( - "reconnected", - expect.any(Function) - ); }); }); From bda76809d75cf8a468d0817b12250eb2cb1568b1 Mon Sep 17 00:00:00 2001 From: Nicolas Polizzo Date: Tue, 2 Sep 2025 10:19:10 +0200 Subject: [PATCH 3/3] also remove event listener in mongodb adapter --- packages/moleculer-db-adapter-mongo/src/index.js | 5 ----- .../moleculer-db-adapter-mongo/test/unit/index.spec.js | 10 ---------- .../test/unit/index.spec.js | 5 ----- 3 files changed, 20 deletions(-) diff --git a/packages/moleculer-db-adapter-mongo/src/index.js b/packages/moleculer-db-adapter-mongo/src/index.js index 95bd700..ca820aa 100644 --- a/packages/moleculer-db-adapter-mongo/src/index.js +++ b/packages/moleculer-db-adapter-mongo/src/index.js @@ -60,11 +60,6 @@ class MongoDbAdapter { this.collection = this.db.collection(this.service.schema.collection); this.service.logger.info("MongoDB adapter has connected successfully."); - - /* istanbul ignore next */ - this.db.on("close", () => this.service.logger.warn("MongoDB adapter has disconnected.")); - this.db.on("error", err => this.service.logger.error("MongoDB error.", err)); - this.db.on("reconnect", () => this.service.logger.info("MongoDB adapter has reconnected.")); }); } diff --git a/packages/moleculer-db-adapter-mongo/test/unit/index.spec.js b/packages/moleculer-db-adapter-mongo/test/unit/index.spec.js index 17f6978..c4e91e2 100644 --- a/packages/moleculer-db-adapter-mongo/test/unit/index.spec.js +++ b/packages/moleculer-db-adapter-mongo/test/unit/index.spec.js @@ -102,7 +102,6 @@ describe("Test MongoDbAdapter", () => { }); it("call connect with uri", () => { - fakeDb.on.mockClear(); fakeDb.collection.mockClear(); adapter.opts = undefined; @@ -119,10 +118,6 @@ describe("Test MongoDbAdapter", () => { expect(adapter.client.db).toHaveBeenCalledWith(undefined); expect(adapter.db).toBe(fakeDb); - expect(adapter.db.on).toHaveBeenCalledTimes(3); - expect(adapter.db.on).toHaveBeenCalledWith("close", expect.any(Function)); - expect(adapter.db.on).toHaveBeenCalledWith("error", expect.any(Function)); - expect(adapter.db.on).toHaveBeenCalledWith("reconnect", expect.any(Function)); expect(adapter.db.collection).toHaveBeenCalledTimes(1); expect(adapter.db.collection).toHaveBeenCalledWith("posts"); @@ -135,7 +130,6 @@ describe("Test MongoDbAdapter", () => { fakeConn.connect.mockClear(); fakeConn.db.mockClear(); - fakeDb.on.mockClear(); fakeDb.collection.mockClear(); adapter.opts = { @@ -156,10 +150,6 @@ describe("Test MongoDbAdapter", () => { expect(adapter.client.db).toHaveBeenCalledWith("demo-db"); expect(adapter.db).toBe(fakeDb); - expect(adapter.db.on).toHaveBeenCalledTimes(3); - expect(adapter.db.on).toHaveBeenCalledWith("close", expect.any(Function)); - expect(adapter.db.on).toHaveBeenCalledWith("error", expect.any(Function)); - expect(adapter.db.on).toHaveBeenCalledWith("reconnect", expect.any(Function)); expect(adapter.db.collection).toHaveBeenCalledTimes(1); expect(adapter.db.collection).toHaveBeenCalledWith("posts"); diff --git a/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js b/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js index 7da10a8..617aca3 100644 --- a/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js +++ b/packages/moleculer-db-adapter-mongoose/test/unit/index.spec.js @@ -154,8 +154,6 @@ if (process.versions.node.split(".")[0] < 14) { }); it("call connect with uri", () => { - fakeDb.on.mockClear(); - adapter.opts = undefined; adapter.model = jest.fn(() => fakeModel); @@ -174,8 +172,6 @@ if (process.versions.node.split(".")[0] < 14) { }); it("call connect with uri & opts", () => { - fakeDb.on.mockClear(); - adapter.opts = { user: "admin", pass: "123456", @@ -232,7 +228,6 @@ if (process.versions.node.split(".")[0] < 14) { }); it("call connect with schema and modelName", () => { - fakeDb.on.mockClear(); const service = broker.createService({ name: "store", schema: fakeSchema,