2012-09-05 9 views
7

Ich habe diesen NodeJS-Code.Node JS - Aufruf einer Methode von einer anderen Methode in der gleichen Datei

module.exports = { 

    foo: function(req, res){ 
    ... 
    this.bar(); // failing 
    bar(); // failing 
    ... 
    }, 

    bar: function(){ 
    ... 
    ... 
    } 
} 

Ich muss aus dem Inneren des foo() Methode, um die bar() Methode aufzurufen. Ich versuchte this.bar() sowie bar(), aber beide schlagen fehl, TypeError: Object #<Object> has no method 'bar()' zu sagen.

Wie kann ich eine Methode von der anderen aufrufen?

+0

'module.exports.foo.call (this);'? – ChaosPandion

+0

@Danil foo ist ein Request-Handler, der vom Router aus aufgerufen wird. – Veera

+0

Irgendetwas verändert definitiv den "diesen" Kontext, aber die Frage ist wer? – ChaosPandion

Antwort

4

Tun Sie es auf diese Weise:

module.exports = { 

    foo: function(req, res){ 

    bar(); 

    }, 
    bar: bar 
} 

function bar() { 
    ... 
} 

Kein Verschluss benötigt wird.

+0

so global 'bar()' dann? –

+0

Nein. Nur innerhalb dieses Moduls. – timidboy

+0

So funktioniert Node.js. – timidboy

1

Ich denke, was Sie tun können, ist der Kontext vor der Übergabe des Rückrufs.

something.registerCallback(module.exports.foo.bind(module.exports)); 
1

Try this:

module.exports = (function() { 
    function realBar() { 
     console.log('works'); 
    } 
    return { 

     foo: function(){ 
      realBar(); 
     }, 

     bar: realBar 
    }; 
}()); 
0

Ist Bar beabsichtigt, intern (privat) zu foo sein?

module.exports = { 
    foo: function(req, res){ 
     ... 
     function bar() { 
      ... 
      ... 
     } 
     bar();  
     ... 
    } 
} 
0

Versuchen Sie den folgenden Code. Sie können jede Funktion von überall beziehen (benötigt Js-Datei zu importieren)

function foo(req,res){ 
    console.log("you are now in foo"); 
    bar(); 
} 
exports.foo = foo; 

function bar(){ 
    console.log("you are now in bar"); 
} 
exports.bar = bar; 
0

Die akzeptierte Antwort falsch ist, müssen Sie die Bar-Methode aus dem aktuellen Bereich rufen mit dem „diesem“ Stichwort:

module.exports = { 
     foo: function(req, res){ 

     this.bar(); 

     }, 
     bar: function() { console.log('bar'); } 
    } 
Verwandte Themen