From b971926bd0163956dbbc89671e8a150301446267 Mon Sep 17 00:00:00 2001 From: //de Date: Sat, 13 Sep 2025 22:02:14 -0700 Subject: [PATCH 1/3] Capture error message, otherwise capture cause of HTTP failure One approach to apache/couchdb-nano#356 --- lib/nano.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/nano.js b/lib/nano.js index c7bbda2..c6ef229 100644 --- a/lib/nano.js +++ b/lib/nano.js @@ -128,7 +128,7 @@ module.exports = exports = function dbScope (cfg) { statusCode }, response.headers ? response.headers : {}) if (!response.status) { - response.statusText = response.cause.toString() + response.statusText = response.message ?? response.cause?.toString() log({ err: 'socket', body, headers: responseHeaders }) if (reject) { reject(new Error(`error happened in your connection. Reason: ${response.statusText}`)) From 1537ad88bcf7b7f00ec90bba548bb81bd56da0ff Mon Sep 17 00:00:00 2001 From: //de Date: Mon, 15 Sep 2025 05:20:20 -0700 Subject: [PATCH 2/3] Comment to clarify what 'response' might be Addressing #356 with a comment, since this is a type issue --- lib/nano.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/nano.js b/lib/nano.js index c6ef229..a1f4d89 100644 --- a/lib/nano.js +++ b/lib/nano.js @@ -128,6 +128,7 @@ module.exports = exports = function dbScope (cfg) { statusCode }, response.headers ? response.headers : {}) if (!response.status) { + // since #relax might have sent Error rather than Response: response.statusText = response.message ?? response.cause?.toString() log({ err: 'socket', body, headers: responseHeaders }) if (reject) { From d3da6c5e4444ced8d1a11a0d1e15958c1af643fb Mon Sep 17 00:00:00 2001 From: //de Date: Mon, 15 Sep 2025 06:40:11 -0700 Subject: [PATCH 3/3] Improvement of performance, readability, and priority in failure case Moving forward on #358 with a bit more aggressive change per discussion --- lib/nano.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/nano.js b/lib/nano.js index a1f4d89..f21389a 100644 --- a/lib/nano.js +++ b/lib/nano.js @@ -122,17 +122,18 @@ module.exports = exports = function dbScope (cfg) { } } - // let parsed - const responseHeaders = Object.assign({ + const responseHeaders = { uri: scrubURL(req.url), - statusCode - }, response.headers ? response.headers : {}) + statusCode, + ...(response.headers ?? {}) + }; + if (!response.status) { - // since #relax might have sent Error rather than Response: - response.statusText = response.message ?? response.cause?.toString() log({ err: 'socket', body, headers: responseHeaders }) if (reject) { - reject(new Error(`error happened in your connection. Reason: ${response.statusText}`)) + // since #relax might have sent Error rather than Response: + const statusText = response.cause?.toString() ?? response.message + reject(new Error(`error happened in your connection. Reason: ${statusText}`)) } return }