From e6878425367c5c1e3362ee5e9cd147e485fe70f4 Mon Sep 17 00:00:00 2001 From: Matthieu Sieben Date: Sat, 22 May 2021 13:42:02 +0200 Subject: [PATCH] fix(server): unregister error event listener (#9245) Co-authored-by: Daniel Roe --- packages/server/src/listener.js | 12 ++++++++++-- packages/server/test/listener.test.js | 17 +++++++++-------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/server/src/listener.js b/packages/server/src/listener.js index b9491a43b96c..8f9a8ca45bc7 100644 --- a/packages/server/src/listener.js +++ b/packages/server/src/listener.js @@ -75,8 +75,16 @@ export default class Listener { // Call server.listen try { this.server = await new Promise((resolve, reject) => { - this._server.on('error', error => reject(error)) - const s = this._server.listen(listenArgs, error => error ? reject(error) : resolve(s)) + this._server.once('error', reject) + this._server.listen(listenArgs, (error) => { + this._server.off('error', reject) + + if (error) { + reject(error) + } else { + resolve(this._server) + } + }) }) } catch (error) { return this.serverErrorHandler(error) diff --git a/packages/server/test/listener.test.js b/packages/server/test/listener.test.js index b6c01c78cac9..fa4365e5095e 100644 --- a/packages/server/test/listener.test.js +++ b/packages/server/test/listener.test.js @@ -17,7 +17,8 @@ describe('server: listener', () => { const mockServer = () => { const server = { address: jest.fn(), - on: jest.fn(), + once: jest.fn(), + off: jest.fn(), listen: jest.fn((listenArgs, callback) => { Promise.resolve().then(callback) return server @@ -73,8 +74,8 @@ describe('server: listener', () => { expect(http.createServer).toBeCalledTimes(1) expect(http.createServer).toBeCalledWith(options.app) - expect(server.on).toBeCalledTimes(1) - expect(server.on).toBeCalledWith('error', expect.any(Function)) + expect(server.once).toBeCalledTimes(1) + expect(server.once).toBeCalledWith('error', expect.any(Function)) expect(server.listen).toBeCalledTimes(1) expect(server.listen).toBeCalledWith( { @@ -111,8 +112,8 @@ describe('server: listener', () => { expect(https.createServer).toBeCalledTimes(1) expect(https.createServer).toBeCalledWith(options.https, options.app) - expect(server.on).toBeCalledTimes(1) - expect(server.on).toBeCalledWith('error', expect.any(Function)) + expect(server.once).toBeCalledTimes(1) + expect(server.once).toBeCalledWith('error', expect.any(Function)) expect(server.listen).toBeCalledTimes(1) expect(server.listen).toBeCalledWith( { @@ -150,8 +151,8 @@ describe('server: listener', () => { expect(http.createServer).toBeCalledTimes(1) expect(http.createServer).toBeCalledWith(options.app) - expect(server.on).toBeCalledTimes(1) - expect(server.on).toBeCalledWith('error', expect.any(Function)) + expect(server.once).toBeCalledTimes(1) + expect(server.once).toBeCalledWith('error', expect.any(Function)) expect(server.listen).toBeCalledTimes(1) expect(server.listen).toBeCalledWith( { @@ -204,7 +205,7 @@ describe('server: listener', () => { const serverError = new Error('error occurred') server.listen.mockImplementationOnce((listenArgs, callback) => { Promise.resolve().then(callback) - const errorListener = server.on.mock.calls[0][1] + const errorListener = server.once.mock.calls[0][1] errorListener(serverError) return server })