thorning / node-mailchimp

node mailchimp wrapper using v3 of the mailchimp api
MIT License
288 stars 35 forks source link

sometimes crashs with "TypeError: Cannot create property 'statusCode' on...." #82

Open macrozone opened 1 year ago

macrozone commented 1 year ago

when doing certain requests (currently investigating which one), it sometimes crashes with

/path/to/node_modules/mailchimp-api-v3/index.js:530
 result.statusCode = response.statusCode;

TypeError: Cannot create property 'statusCode' on string '{"members":[{"id":"xxx","email_address":"....."
prasidhda commented 1 year ago

@macrozone , I am also facing this issue once in a while and it forces to stop the docker container too. Did you find the solution to this?

macrozone commented 1 year ago

@macrozone , I am also facing this issue once in a while and it forces to stop the docker container too. Did you find the solution to this?

not yet, i thought it was related to the chunk size, so i lowered the amount of members that i sent to the mailchimp api.

at first i thought it fixed the problem, but that is not the case, it still happens, but unfortunatly not consistently.

I also use meteor so i thought it would be a node-fiber related issue, since the whole thing is in a try-catch but still does not manage to catch this error.

macrozone commented 1 year ago

it seems because it uses the deprecated request package which has bugs on its own

macrozone commented 1 year ago

so here is my conclusion:

so here i worked around this problem:

diff --git a/index.js b/index.js
index 34f9e2ec2b74b78e1e48945fbd307449839ef4d6..f74c3b2d3a2c15e6ba90d2295323a11aac450b4e 100644
--- a/index.js
+++ b/index.js
@@ -527,6 +527,10 @@ Mailchimp.prototype.request = function (options, done) {
       }

       var result = response.body || {};
+      if (typeof result === "string") {
+        reject(new Error("request was cut off"));
+        return;
+      }
       result.statusCode = response.statusCode;

       resolve(result)

that way i can at least handle it gracefully.

i then try to retry the request in my application code. The error happens rarley, so on second attempt it usually works

prasidhda commented 1 year ago

@macrozone , Thanks for the detailed information. I will try to implement your solution.

macrozone commented 1 year ago

if you have the capacity its best to move away from this library as its not maintained anymore and is based on deprecated packages