NodeJs : TypeError: require(...) is not a function

Javascriptnode.jsRequire

Javascript Problem Overview


I am trying to require a file and afterwards pass it to a var. I am following this tutorial to create an authentication system. After writing the server.js file and trying to compile I got a BSON error therefore I changed the line that required the release version of it in mongoose.

Here are my code and error:

server.js

require('./app/routes')(app, passport);

Error

require('./app/routes')(app, passport);
                   ^

TypeError: require(...) is not a function
           at Object.<anonymous> (d:\Node JS learning\WorkWarV2\server.js:38:24)
           at Module._compile (module.js:434:26)
           at Object.Module._extensions..js (module.js:452:10)
           at Module.load (module.js:355:32)
           at Function.Module._load (module.js:310:12)
           at Function.Module.runMain (module.js:475:10)
           at startup (node.js:117:18)
           at node.js:951:3

Process finished with exit code 1

I have read that this usually means that requireJS is not getting loaded properly yet I am not aware why or how to fix it.

Edit due to comment:

As asked, here is the result of console.log(require);

Javascript Solutions


Solution 1 - Javascript

For me, when I do Immediately invoked function, I need to put ; at the end of require().

Error:

const fs = require('fs')

(() => {
  console.log('wow')
})()

Good:

const fs = require('fs');

(() => {
  console.log('wow')
})()

Solution 2 - Javascript

I think this means that module.exports in your ./app/routes module is not assigned to be a function so therefore require('./app/routes') does not resolve to a function so therefore, you cannot call it as a function like this require('./app/routes')(app, passport).

Show us ./app/routes if you want us to comment further on that.

It should look something like this;

module.exports = function(app, passport) {
    // code here
}

You are exporting a function that can then be called like require('./app/routes')(app, passport).


One other reason a similar error could occur is if you have a circular module dependency where module A is trying to require(B) and module B is trying to require(A). When this happens, it will be detected by the require() sub-system and one of them will come back as null and thus trying to call that as a function will not work. The fix in that case is to remove the circular dependency, usually by breaking common code into a third module that both can separately load though the specifics of fixing a circular dependency are unique for each situation.

Solution 3 - Javascript

For me, this was an issue with cyclic dependencies.

IOW, module A required module B, and module B required module A.

So in module B, require('./A') is an empty object rather than a function.

https://stackoverflow.com/questions/10869276/how-to-deal-with-cyclic-dependencies-in-node-js

Solution 4 - Javascript

Remember to export your routes.js.

In routes.js, write your routes and all your code in this function module:

exports = function(app, passport) {

/* write here your code */ 

}

Solution 5 - Javascript

For me, I got similar error when switched between branches - one used newer ("typescriptish") version of @google-cloud/datastore packages which returns object with Datastore constructor as one of properties of exported object and I switched to other branch for a task, an older datastore version was used there, which exports Datastore constructor "directly" as module.exports value. I got the error because node_modules still had newer modules used by branch I switched from.

Solution 6 - Javascript

I've faced to something like this too. in your routes file , export the function as an object like this :

 module.exports = {
     hbd: handlebar
 }

and in your app file , you can have access to the function by .hbd and there is no ptoblem ....!

Solution 7 - Javascript

I don't know how but in may case it got fixed when I changed

require('./routes')(app)

to

require('./routes')

Solution 8 - Javascript

In my case i fix when i put the S in the module.exportS,

BEFORE:

module.export = () => {}

AFTER:

module.exports = () => {}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiontaigi100View Question on Stackoverflow
Solution 1 - JavascriptmCYView Answer on Stackoverflow
Solution 2 - Javascriptjfriend00View Answer on Stackoverflow
Solution 3 - JavascriptBryan LarsenView Answer on Stackoverflow
Solution 4 - JavascriptMilani IgorView Answer on Stackoverflow
Solution 5 - JavascriptKote IsaevView Answer on Stackoverflow
Solution 6 - JavascriptHR.ShahhosseiniView Answer on Stackoverflow
Solution 7 - JavascriptSamyak JainView Answer on Stackoverflow
Solution 8 - JavascriptBreno AllenCSView Answer on Stackoverflow