node-mailchimp icon indicating copy to clipboard operation
node-mailchimp copied to clipboard

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

Open macrozone opened this issue 2 years ago • 6 comments

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":"....."

macrozone avatar May 12 '23 08:05 macrozone

@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?

prasidhda avatar Jun 06 '23 04:06 prasidhda

@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 avatar Jun 22 '23 10:06 macrozone

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

macrozone avatar Jun 24 '23 12:06 macrozone

so here is my conclusion:

  • the request package that is used is deprecated and has bugs, it can lead to requests that are not properly finished
  • those requests still will end up with a normal success callback in the request package, but the response.body is then a string and not an object
  • at this line https://github.com/thorning/node-mailchimp/blob/master/index.js#L530 its expected that the request.body is an object, otherwise it tries to assign a property to a string, which does not work and throws an error
  • an error there won't fail the surrounding promise, so you can't catch that.

so here i worked around this problem:

  • i patched this package to reject the promise
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

macrozone avatar Jun 24 '23 20:06 macrozone

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

prasidhda avatar Jun 28 '23 02:06 prasidhda

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

macrozone avatar Jun 28 '23 09:06 macrozone