javascript - NodeJs : TypeError: require(...) är inte en funktion


Jag försöker att kräva en fil och därefter tilldela den till en variabel. Jag följer denna handledning för att skapa ett autentiseringssystem. Efter att ha skrivit server.js-filen och försökt att kompilera fick jag ett BSON-fel, därför ändrade jag raden som krävde release-versionen av den i mongoose.

Här är min kod och mitt fel:

server.js :

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

Fel :

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

Jag har läst att detta vanligtvis innebär att requireJS inte laddas korrekt, men jag vet inte varför eller hur man åtgärdar det.

Redigera på grund av kommentar: :

Som begärt, här är resultatet av console.log(require);

Svar #1

För mig, när jag gör en omedelbart anropad funktion, behöver jag sätta ; i slutet av require().

Fel :

const fs = require('fs')

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

Bra :

const fs = require('fs');

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

Svar #2

Jag tror att detta betyder att module.exports i din ./app/routes-modul inte är tilldelad att vara en funktion, så därför kommer require('./app/routes') inte att lösas till en funktion, och därför kan du inte anropa den som en funktion på det här sättet: require('./app/routes')(app, passport).

Visa oss ./app/routes om du vill att vi ska kommentera vidare om det.

Det bör se ut ungefär så här;

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

Du exporterar en funktion som sedan kan anropas som require('./app/routes')(app, passport).

En annan anledning till att ett liknande fel kan uppstå är om du har ett cirkulärt modulsberoende där modul A försöker require(B) och modul B försöker require(A). När detta händer kommer det att upptäckas av require()-undermodulen och en av dem kommer att komma tillbaka som null och därmed kommer ett försök att anropa det som en funktion inte att fungera. Åtgärden i det fallet är att ta bort det cirkulära beroendet, vanligtvis genom att bryta ut gemensam kod till en tredje modul som båda kan laddas separat, även om detaljerna för att åtgärda ett cirkulärt beroende är unika för varje situation.

Svar #3

För mig var detta ett problem med cykliska beroenden.

Med andra ord, modul A krävde modul B, och modul B krävde modul A.

Så i modul B är require('./A') ett tomt objekt snarare än en funktion.

Hur man hanterar cykliska beroenden i Node.js

Relaterade artiklar