2016-05-16 7 views
0

Ich habe Knoten App mit dem folgenden Code (I Probe der Codestruktur setzen)Modul exportiert zwei diffrent mit approches

Dieser Code in den server.js das ist der Einstiegspunkt meiner nodeModule

function run() { 
    app.listen(3001, function() { 
     console.log("App is listenting on port 3000"); 
    }) 
} 

function addPath(args) { 
    plug.loadF(args.loadFolder); 
}; 

function preProcess (args) { 

    if (_.isEmpty(args)) { 
     run(); 
    } 
}; 

module.exports = preProcess(); 
module.exports ={ 
    run: run, 
    addPath: addPath 
} 

Wie Sie die Exporte zweimal die auf diese Weise sehen, kann ich beide Option unterstützen, wenn die app/Modul von CMD aufgerufen wird (Aufruf zum server.js) und Sekunden ist mit der Verwendung von Code als Abhängigkeit unter node_modules für den Aufruf

  1. für module.exports = preProcess(); module.exports = preProcess();, wenn mein app/nodeModule von einem externen Programm wie java/buildpack und keine Argumente sind

    vergangen genannt wird
  2. Exporte run und addPath, die, wenn mein Modul ist als node_moudule in Benutzer-App installiert ist und Sie durch Code jene API aufrufen

Meine Frage ist, gibt es einen besseren Weg in Knoten, diese Exporte zu schreiben, oder wenn es in Ordnung ist?

Antwort

1

Sie müssen das im Knoten bereitgestellte Exportmodul verstehen.

Das Modul module.exports wird vom Modul-System erstellt. Manchmal ist dies nicht akzeptabel; Viele wollen, dass ihr Modul eine Instanz von irgendeiner Klasse ist. Ordnen Sie dazu das gewünschte Exportobjekt module.exports zu. Beachten Sie, dass das Exportieren des gewünschten Objekts einfach die lokale Exportvariable erneut bindet, was wahrscheinlich nicht das ist, was Sie tun möchten.

~ https://nodejs.org/api/modules.html#modules_module_exports

Vereinfacht die Exporte Modul gibt Ihnen die Funktionalität des gesamten Code in einer Datei Einwickeln, so dass es in eine andere Datei wiederverwendet werden können.

Daher kann offensichtlich eine Datei nur ein Objekt exportieren.

In Ihrem obigen Code so müssen Sie Ihre Methoden in ein Objekt kapseln:

var server = {} 
server.run = function() { 
    app.listen(3001, function() { 
     console.log("App is listenting on port 3000"); 
    }) 
} 

server.addPath = function addPath(args) { 
    plug.loadF(args.loadFolder); 
}; 

server.preProcess = function (args) { 

    if (_.isEmpty(args)) { 
     run(); 
    } 
}; 

module.exports = server 

nun auf einer anderen Seite können Sie einfach tun:

var server = require ("../../path/to/server.js") 
server.preProcess() // Call to preprocess function 
server.addPath() // Call to addPath function 
server.run() // Call to run function 

Im Grunde alles, was ich habe verkapselt die Methoden in ein einzelnes "Server" -Objekt und dann exportiert das Objekt.

+0

In diesem Fall verwenden Sie besser 'exports' anstelle einer neuen lokalen Variablen' server'. – alexmac

+0

Nutzungssache. Ich mag es, meine globalen Objekte frei von Störungen zu halten. –

+0

@SaleemAhmed - Danke mit Ihrem Code funktioniert es, wenn Sie es als Beispiel Code nennen, aber wie es ohne Knotencodeaufruf funktionieren würde? wenn andere Programme es von CMD anrufen und zum Server rufen.js und es muss den Prozess wie das Ausführen des Servers aufrufen ... Können Sie bitte ein Beispiel liefern, das auch die module.exports = preProcess() beantwortet? –