2015-10-12 12 views
5

Wie rufen Sie eine Funktion innerhalb einer anderen Funktion in einer module.exports-Deklaration auf?Node JS ruft eine "lokale" Funktion innerhalb von module.exports auf

Ich habe MVC Struktur Knoten js Projekt und einen Controller namens TestController.js. Ich möchte innerhalb Controller-Methode zugreifen, aber mit this Schlüsselwort gibt unter Fehler:

cannot call method getName of undefined

"use strict" 
module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     this.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 

Wie kann ich Zugriff auf Methoden in der Steuerung?

+1

Der Wert von 'this' auf dem Ausführungskontext hängt gefunden, nicht, wie die Funktion definiert ist. – adeneo

Antwort

12

ich die Lösung :-)

"use strict" 
var self = module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     self.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 
+0

'' 'this.getName (Daten)' '' würde immer noch funktionieren, aber das ist eine gute Idee mit der Zuweisung einer Namenskonvention – FrickeFresh

3

Sie können auf die getName-Funktion durch module.exports zugreifen. Wie so:

"use strict" 
module.exports = { 
    myName : function(req, res, next) { 
     // accessing method within controller 
     module.exports.getName(data); 
    }, 

    getName : function(data) { 
     // code 
    } 
} 
7

Vielleicht könnten Sie es so machen. Es reduziert die Verschachtelung. Und all Ihr Export erfolgt am Ende Ihrer Datei.

"use strict"; 

var _getName = function() { 
    return 'john'; 
}; 

var _myName = function() { 
    return _getName(); 
}; 

module.exports = { 
    getName : _getName, 
    myName : _myName 
}; 
+1

Zusätzlicher Vorteil dieses Ansatzes ist, dass Funktionen sich gegenseitig referenzieren können (d. H. '_myName' kann' _getName' nennen) –

+0

Absolut, ich denke, es ist auch eleganter als die andere Lösung. Es gibt keine Verwendung von * self * und Sie können dem Modul private Funktionen hinzufügen. – Sapher