NodeJS - TypeError: Busboy is not a constructor

Viewed 3245

So, something happened a couple of days ago and a project of mine started showing the following error:

TypeError: Busboy is not a constructor
at /app/node_modules/connect-busboy/index.js:21:18
at /app/node_modules/express-fileupload/lib/index.js:9:31
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/app/node_modules/express/lib/router/index.js:323:13)
at /app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/app/node_modules/express/lib/router/index.js:341:12)
at next (/app/node_modules/express/lib/router/index.js:275:10)
at urlencodedParser (/app/node_modules/body-parser/lib/types/urlencoded.js:100:7)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/app/node_modules/express/lib/router/index.js:323:13)
at /app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/app/node_modules/express/lib/router/index.js:341:12)
at next (/app/node_modules/express/lib/router/index.js:275:10)
at jsonParser (/app/node_modules/body-parser/lib/types/json.js:119:7)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/app/node_modules/express/lib/router/index.js:323:13)
at /app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/app/node_modules/express/lib/router/index.js:341:12)
at next (/app/node_modules/express/lib/router/index.js:275:10)
at logger (/app/node_modules/morgan/index.js:144:5)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/app/node_modules/express/lib/router/index.js:323:13)

What I think is strange is that this Busboy isn't being used on my code, only in dependencies from node_modules. Does anyone know if there is any compatibility error with the version of Busboy or any of those listed in the error that could cause such thing?

2 Answers

Just adding another answer for someone who might be confused. Busboy exports a function and not a class. So, one need not use new keyword for creating an instance of Busboy.

const Busboy = require('busboy');
const busboy = Busboy({ headers: req.headers });

This answer is only to provide clarity to someone who is confused based on multiple examples and tutorials. Please suggest improvements if any.

Look, node_modules doesn't only contain the packages, which you installed, it also contains dependencies of your installed packages. So a good practice is to use lock files as package-lock.json, which will lock every package's version and every time you run npm install it installs the exact locked versions (to be more precise - with npm ci script). So in this case as I see one of your packages has been updated or maybe that "busboy" package has been updated and after you ran install script it brought to you the updated package (or packages) which involves this error.

Related