NodeJs : TypeError: required(…) is geen functie

Ik probeer een bestand te eisen en het daarna door te geven aan een var. Ik volg dezetutorial om een authenticatiesysteem te maken. Na het schrijven van het server.js-bestand en het proberen te compileren, kreeg ik een bson-fout, daarom heb ik de regel gewijzigd die de releaseversie ervan in mangoest vereiste.

Hier zijn mijn code en fout:

server.js

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

Fout

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

Ik heb gelezen dat dit meestal betekent dat requiredJS niet goed wordt geladen, maar ik weet niet waarom of hoe ik dit moet oplossen.

Bewerken wegens opmerking:

Zoals gevraagd, hieris het resultaat van console.log(require);


Antwoord 1, autoriteit 100%

Ik denk dat dit betekent dat module.exportsin je ./app/routes-module niet is toegewezen aan een functie, dus daarom require('./app/routes')lost niet op in een functie, dus daarom kun je het niet aanroepen als een functie zoals deze require('./app/routes')(app, passport).

Laat ons ./app/routeszien als je wilt dat we daar verder op reageren.

Het zou er ongeveer zo uit moeten zien;

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

U exporteert een functie die vervolgens kan worden aangeroepen als require('./app/routes')(app, passport).


Een andere reden waarom een soortgelijke fout kan optreden, is als u een circulaire module-afhankelijkheid hebt waarbij module A probeert te require(B)en module B probeert te require(A). Wanneer dit gebeurt, wordt het gedetecteerd door het require()-subsysteem en een van hen zal terugkomen als nullen dus proberen om dat als een functie aan te roepen, zal niet werk. De oplossing in dat geval is om de circulaire afhankelijkheid te verwijderen, meestal door gemeenschappelijke code op te splitsen in een derde module die beide afzonderlijk kunnen worden geladen, hoewel de details van het repareren van een circulaire afhankelijkheid uniek zijn voor elke situatie.


Antwoord 2, autoriteit 93%

Voor mij, als ik de functie Onmiddellijk aanroep, moet ik ;aan het einde van require()zetten.

Fout:

const fs = require('fs')
(() => {
  console.log('wow')
})()

Goed:

const fs = require('fs');
(() => {
  console.log('wow')
})()

Antwoord 3, autoriteit 14%

Voor mij was dit een probleem met cyclische afhankelijkheden.

IOW, module A vereiste module B en module B vereiste module A.

Dus in module B is require('./A')een leeg object in plaats van een functie.

Hoe om te gaan met cyclische afhankelijkheden in Node.js


Antwoord 4, autoriteit 2%

Bij mij kreeg ik een soortgelijke fout bij het wisselen tussen branches: een gebruikte nieuwere (“typische”) versie van @google-cloud/datastore-pakketten die een object met Datastore-constructor als een van de eigenschappen van geëxporteerd object en ik schakelde over naar een andere tak voor een taak, daar werd een oudere datastore-versie gebruikt, die de Datastore-constructor “direct” exporteert als module.exports-waarde. Ik kreeg de foutmelding omdat node_modules nog steeds nieuwere modules had die werden gebruikt door de branch waar ik van overstapte.


Antwoord 5

Vergeet niet om uw routes.jste exporteren.

In routes.jsschrijft u uw routes en al uw code in deze functiemodule:

exports = function(app, passport) {
/* write here your code */ 
}

Antwoord 6

Wikkel gewoon de pijlfunctie in waar u de bestanden nodig heeft


Antwoord 7

Ik heb ook zoiets meegemaakt.
exporteer in je routesbestand de functie als een object als volgt:

module.exports = {
     hbd: handlebar
 }

en in je app-bestand heb je toegang tot de functie via .hbd
en er is geen ptoblem ….!


Antwoord 8

In mijn geval herstel ik wanneer ik de S in module.exportS plaats,

VOOR:

module.export = () => {}

Na:

module.exports = () => {}

Other episodes