2017-11-03 5 views
0

ich eine Funktion wie so in einer Datei erklärt:NodeJS Funktionsdeklaration

File1: 
    module.exports = { 
     function1: function(callback){ 
      //do some work 
     }, 
    } 

In einer anderen Datei, wenn ich File1 importieren und rufen file1.function1 die Funktion läuft und ich bekomme das Ergebnis.

Obwohl, wenn ich in File1 bin und erklären eine andere Funktion:

module.exports = { 
    function1: function(callback){ 
      //do some work 
    }, 
    function2: function(callback){ 
     var result = function1... 
    } 
} 

In diesem Fall habe ich function1 bin immer nicht definiert ist.

Warum passiert das? sollte es nicht irgendwie unabhängig davon genannt werden, wo der Anruf gemacht wird?

+1

Die Funktion Ausdrücke sind, nicht Funktionsdeklarationen. – Quentin

+0

Bitte zeigen Sie uns den genauen Code, der den Fehler verursacht, sowohl die Exporte als auch den Import. – Bergi

Antwort

4

Das Problem ist, dass Sie versuchen, auf Funktion1 aus dem falschen Bereich zuzugreifen. In Ihrem Bereich gibt es keine definierte Variable "function1". Sie haben nur module.exports.function1

const exportObject = { 
    function1: function(callback){ 
      //do some work 
    }, 
    function2: function(callback){ 
     var result = exportObject.function1... // or this.function1 
    } 
} 

module.exports = exportObject; 

UPDATE funktionieren sollte: ein paar Beispiele:

function1() { 
    // this will be executed by example2 
} 

var example3 = { 
    function1: function() { 
     // this will be executed by example3 
    } 
} 
const exportObject = { 
    function1: function(callback){ 
     // This will be executed by example1 
    }, 
    function2: function(callback){ 
     // example1 
     var result = exportObject.function1() // or this.function1() 
     // example2 
     var result = function1() 
     // example3 
     var result = example3.function1() 
    } 
} 

module.exports = exportObject; 
+0

Ok, es funktioniert so. mehr Details darüber, warum es so ist? Ich werde diese Antwort akzeptieren – JoaoFilipeClementeMartins

+0

Das Hauptproblem ist Semantik.Wie @ user1695032 erwähnt, ist 'function1' im Bereich von' function2' nicht sichtbar. Sie können diesen Codeblock auf verschiedene Arten neu schreiben, die für Sie besser funktionieren könnten. –

+0

Ich habe die Antwort aktualisiert ... wenn Sie Beispiel Nr. 3 betrachten ... das ist, was Sie im Wesentlichen tun müssen, damit Ihr Code funktioniert. Der Unterschied besteht darin, dass Sie ein Teil desselben übergeordneten Objekts waren. – user1695032

3

function1 keine Variable ist.

Dies ist eine Eigenschaft des Objekts, das Sie module.exports zugewiesen haben.

Vergleichen Sie dazu:

var foo = { 
 
    bar: 1 
 
} 
 

 
console.log(bar);

bar eine Eigenschaft von foo ist, keine Variable in seinem eigenen Recht.

Sie müssen es als solches behandeln.

var foo = { 
 
    bar: 1 
 
} 
 

 
console.log(foo.bar);

Das gleiche gilt für function1.

Sie benötigen für den Zugriff als Objekteigenschaft:

var result = module.exports.function1(); 
0

Wenn Sie eine Funktion module.exports.function1 in Datei 1 zu erstellen, wie Sie es Zugriff in Datei 1 durch module.exports.function1 sagen. Es ist ein bisschen langatmig. Alternativ können Sie es wie folgt in die Datei 1 erstellen:

var function1 = function() {...}; 
module.exports.function1 = function1; 

function1(); 

Sie können weiterhin function1 in Datei verwenden, 2:

var file1 = require('./file1'); 
file1.function1();