Ich versuche, eine Datei zu benötigen und sie anschließend an eine Variable zu übergeben. Ich folge diesem Tutorial, um ein Authentifizierungssystem zu erstellen. Nachdem ich die Datei server.js geschrieben und versucht hatte zu kompilieren, wurde ein bson-Fehler angezeigt. Daher habe ich die Zeile geändert, für die die Release-Version in mongoose erforderlich war.
Hier sind mein Code und mein Fehler:
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
Ich habe gelesen, dass dies normalerweise bedeutet, dass requireJS nicht richtig geladen wird, aber ich weiß nicht, warum oder wie ich es beheben soll.
Aufgrund eines Kommentars bearbeiten:
Wie gefragt, hier ist das Ergebnis vonconsole.log(require);
javascript
node.js
require
taigi100
quelle
quelle
console.log(require)
vor der Leitung, die ausfällt? Sie sollten auf der Serverseite kein requireJS benötigen. In node.js ist ein Modulsystem integriert (CommonJS verwendet ebenfalls dierequire
Funktion). Etwas scheint die globalerequire
Variable zu verändern.Antworten:
Ich denke, dies bedeutet, dass
module.exports
in Ihrem./app/routes
Modul keine Funktion zugewiesen ist und daherrequire('./app/routes')
nicht in eine Funktion aufgelöst wird. Daher können Sie sie nicht als solche Funktion aufrufenrequire('./app/routes')(app, passport)
.Zeigen Sie uns,
./app/routes
ob wir dies weiter kommentieren sollen.Es sollte ungefähr so aussehen;
module.exports = function(app, passport) { // code here }
Sie exportieren eine Funktion, die dann wie aufgerufen werden kann
require('./app/routes')(app, passport)
.Ein weiterer Grund, warum ein ähnlicher Fehler auftreten kann, besteht darin, dass Sie eine zirkuläre Modulabhängigkeit haben, in der Modul A
require(B)
und Modul B dies versuchenrequire(A)
. Wenn dies geschieht, wird es vomrequire()
Subsystem erkannt und einer von ihnen kommt als zurücknull
und der Versuch, dies als Funktion aufzurufen, funktioniert nicht. In diesem Fall besteht die Lösung darin, die zirkuläre Abhängigkeit zu entfernen, indem normalerweise gemeinsamer Code in ein drittes Modul aufgeteilt wird, das beide separat laden können, obwohl die Besonderheiten des Fixierens einer zirkulären Abhängigkeit für jede Situation eindeutig sind.quelle
module.exports.functionName = function functionName(app, passport) { ... }
require('./app/routes')(app, passport);
was nicht so funktioniert, wie Sie den Export anzeigen .Für mich, wenn ich sofort aufgerufene Funktion mache, muss ich
;
am Ende setzenrequire()
.Error:
const fs = require('fs') (() => { console.log('wow') })()
Gut:
const fs = require('fs'); (() => { console.log('wow') })()
quelle
() => {}
als Argument an alles übergeben, was von zurückgegeben wirdrequire( ... )
. Furchtbar!puppeteer
und hätte dort fast ein Problem angefordert, bis ich hier eines gefunden habe. Puh ... hätte nie gedacht, dass;
mich das so sehr beunruhigen würde.;(() => {})()
Für mich war dies ein Problem mit zyklischen Abhängigkeiten.
IOW, Modul A erforderliches Modul B und Modul B erforderliches Modul A.
Also ist in Modul B
require('./A')
eher ein leeres Objekt als eine Funktion.Umgang mit zyklischen Abhängigkeiten in Node.js.
quelle
Beim Umschalten zwischen Zweigen trat für mich ein ähnlicher Fehler auf - eine verwendete neuere ("typescriptish") Version von
@google-cloud/datastore
Paketen, die ein Objekt mit dem Datenspeicherkonstruktor als eine der Eigenschaften des exportierten Objekts zurückgibt, und ich wechselte für eine Aufgabe zu einem anderen Zweig, einer älteren Datenspeicherversion wurde dort verwendet, der den Datenspeicherkonstruktor "direkt" alsmodule.exports
Wert exportiert . Ich habe den Fehler erhalten, weil node_modules noch neuere Module hatte, die von dem Zweig verwendet wurden, von dem ich gewechselt habe.quelle
Ich habe mich auch so etwas gestellt. Exportieren Sie die Funktion in Ihrer Routendatei als Objekt wie folgt:
module.exports = { hbd: handlebar }
und in Ihrer App-Datei können Sie über .hbd auf die Funktion zugreifen, und es gibt kein Problem ....!
quelle
Denken Sie daran, Ihre zu exportieren
routes.js
.In
routes.js
, schreiben Sie Ihre Routen und den gesamten Code in diesem Funktionsbaustein:exports = function(app, passport) { /* write here your code */ }
quelle
Schließen Sie einfach die Pfeilfunktion dort ein, wo Sie die Dateien benötigen
quelle