From 7ea257945d3843933574e9fc411528fd57534bf7 Mon Sep 17 00:00:00 2001 From: Aleksandre Clavet Date: Thu, 28 Oct 2021 15:34:49 -0400 Subject: [PATCH 1/5] Add injectable callback to request handle in node_adapter --- src/adapters/node_adapter.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/adapters/node_adapter.js b/src/adapters/node_adapter.js index 13c9bb34..34033ef8 100644 --- a/src/adapters/node_adapter.js +++ b/src/adapters/node_adapter.js @@ -113,6 +113,13 @@ var NodeAdapter = Class({ className: 'NodeAdapter', request.on('error', function(error) { self._returnError(response, error) }); response.on('error', function(error) { self._returnError(null, error) }); + if (this._handleCallback) { + const handled = this._handleCallback(request, response); + if (handled) { + return; + } + } + if (this._static.test(requestUrl.pathname)) return this._static.call(request, response); From 8f0e66386039e5cd78f75e3fd48650819bad92a0 Mon Sep 17 00:00:00 2001 From: Aleksandre Clavet Date: Thu, 28 Oct 2021 16:46:57 -0400 Subject: [PATCH 2/5] Allowlist new option and make callback async --- src/adapters/node_adapter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/adapters/node_adapter.js b/src/adapters/node_adapter.js index 34033ef8..07d32d19 100644 --- a/src/adapters/node_adapter.js +++ b/src/adapters/node_adapter.js @@ -27,7 +27,7 @@ var NodeAdapter = Class({ className: 'NodeAdapter', initialize: function(options) { this._options = options || {}; - validateOptions(this._options, ['engine', 'mount', 'ping', 'timeout', 'extensions', 'websocketExtensions']); + validateOptions(this._options, ['engine', 'mount', 'ping', 'timeout', 'extensions', 'websocketExtensions', 'handleCallback']); this._extensions = []; this._endpoint = this._options.mount || this.DEFAULT_ENDPOINT; @@ -114,7 +114,7 @@ var NodeAdapter = Class({ className: 'NodeAdapter', response.on('error', function(error) { self._returnError(null, error) }); if (this._handleCallback) { - const handled = this._handleCallback(request, response); + const handled = await this._handleCallback(request, response); if (handled) { return; } From 10671bedea31663f7e2b2e73b3b363eeb3c0f904 Mon Sep 17 00:00:00 2001 From: Aleksandre Clavet Date: Thu, 28 Oct 2021 17:04:12 -0400 Subject: [PATCH 3/5] remove async from callback --- src/adapters/node_adapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapters/node_adapter.js b/src/adapters/node_adapter.js index 07d32d19..00bfa433 100644 --- a/src/adapters/node_adapter.js +++ b/src/adapters/node_adapter.js @@ -114,7 +114,7 @@ var NodeAdapter = Class({ className: 'NodeAdapter', response.on('error', function(error) { self._returnError(null, error) }); if (this._handleCallback) { - const handled = await this._handleCallback(request, response); + const handled = this._handleCallback(request, response); if (handled) { return; } From 8c35013284d6ffc8ab139eeb8e043501c77dbb80 Mon Sep 17 00:00:00 2001 From: Aleksandre Clavet Date: Thu, 28 Oct 2021 17:14:07 -0400 Subject: [PATCH 4/5] Register callback in node_adapter --- src/adapters/node_adapter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/adapters/node_adapter.js b/src/adapters/node_adapter.js index 00bfa433..162036f9 100644 --- a/src/adapters/node_adapter.js +++ b/src/adapters/node_adapter.js @@ -33,6 +33,7 @@ var NodeAdapter = Class({ className: 'NodeAdapter', this._endpoint = this._options.mount || this.DEFAULT_ENDPOINT; this._endpointRe = new RegExp('^' + this._endpoint.replace(/\/$/, '') + '(/[^/]*)*(\\.[^\\.]+)?$'); this._server = Server.create(this._options); + this._handleCallback = this._options.handleCallback; this._static = new StaticServer(path.join(__dirname, '..', '..', 'client'), /\.(?:js|map)$/); this._static.map(path.basename(this._endpoint) + '.js', this.SCRIPT_PATH); From f3a460a312932706999b08d0492857519b985102 Mon Sep 17 00:00:00 2001 From: Aleksandre Clavet Date: Wed, 10 Nov 2021 17:13:55 -0500 Subject: [PATCH 5/5] Refactor handle to finish on callback --- src/adapters/node_adapter.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/adapters/node_adapter.js b/src/adapters/node_adapter.js index 162036f9..97e71165 100644 --- a/src/adapters/node_adapter.js +++ b/src/adapters/node_adapter.js @@ -105,9 +105,7 @@ var NodeAdapter = Class({ className: 'NodeAdapter', }, handle: function(request, response) { - var requestUrl = url.parse(request.url, true), - requestMethod = request.method, - self = this; + var self = this; request.originalUrl = request.url; @@ -115,11 +113,25 @@ var NodeAdapter = Class({ className: 'NodeAdapter', response.on('error', function(error) { self._returnError(null, error) }); if (this._handleCallback) { - const handled = this._handleCallback(request, response); - if (handled) { - return; - } + this._handleCallback(request, response).then((handled) => { + if (handled) { + return; + } else { + this._finishHandle(request, response); + return; + } + }).catch((err) => { + console.log(err); + this._finishHandle(request, response); + }); + return; } + this._finishHandle(request, response); + }, + + _finishHandle(request, response) { + var requestUrl = url.parse(request.url, true), + requestMethod = request.method; if (this._static.test(requestUrl.pathname)) return this._static.call(request, response);