web-dev-qa-db-fra.com

NodeJs: TypeError: require (...) n'est pas une fonction

J'essaie d'exiger un fichier et de le transmettre ensuite à un var. Je suis this tutoriel pour créer un système d'authentification. Après avoir écrit le fichier server.js et essayé de compiler, j’ai eu une erreur bson, c’est pourquoi j’ai changé la ligne qui nécessitait la version finale en mangouste.

Voici mon code et erreur:

server.js

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

Erreur

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

J'ai lu que cela signifie généralement que requireJS n'est pas chargé correctement mais je ne sais pas pourquoi ni comment le réparer.

Modifier pour commentaire:

Comme demandé, ici est le résultat de console.log(require);

60
taigi100

Je pense que cela signifie que module.exports dans votre module ./app/routes n'est pas affecté à une fonction. Par conséquent, require('./app/routes') ne résout pas en fonction, vous ne pouvez donc pas l'appeler comme une fonction comme celle-ci require('./app/routes')(app, passport).

Montrez-nous ./app/routes si vous souhaitez que nous commentions davantage à ce sujet.

Ça devrait ressembler a quelque chose comme ca;

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

Vous exportez une fonction qui peut ensuite s'appeler comme require('./app/routes')(app, passport).


Une erreur similaire peut également se produire si vous avez une dépendance de module circulaire dans laquelle le module A tente de require(B) et le module B tente de require(A). Lorsque cela se produit, il est détecté par le sous-système require() et l'un d'eux revient sous la forme null. Par conséquent, le fait d'appeler cela en tant que fonction ne fonctionnera pas. Dans ce cas, la solution consiste à supprimer la dépendance circulaire, généralement en divisant le code commun en un troisième module que les deux peuvent charger séparément, bien que les spécificités de la correction d'une dépendance circulaire soient uniques pour chaque situation.

80
jfriend00

Pour moi, lorsque je fais immédiatement appel à la fonction, je dois mettre ; à la fin de require().

Erreur:

const fs = require('fs')

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

Bien:

const fs = require('fs');

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

Pour moi, c'était un problème avec les dépendances cycliques.

IOW, module A requis module B et module B requis module A.

Ainsi, dans le module B, require('./A') est un objet vide plutôt qu'une fonction.

Comment traiter les dépendances cycliques dans Node.js

10
Bryan Larsen