2016-07-02 6 views
0

Ich habe Probleme beim Exportieren meiner Routingtabelle in meiner Expressanwendung.Exportiert Referenz- und Exportzeiger node.js

Zuerst in /bin/www.js Datei habe ich meine globale Variable, die Routing-Tabelle reporesents:

var routingTable = []; 

Dann ein einfaches Routing zu erstellen Ich bin gerade neue Routing-Objekte schieben Server mit Ereignis wartet.

server.on('listening', onListening); 

function onListening() { 
    var addr = server.address(); 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    console.log('Listening on ' + bind); 
    routingTable.push({ 
    address: "localhost:8080", 
    version: 1, 
    name: "some-service" 
    }); 
} 

Wenn ich console.log routingTable nach dem Push ich habe dieses einzelne Objekt in ihm.

Dann habe ich einen Getter für diese Variable:

exports.getRouting = function() { 
    return routingTable; 
}; 

Diese Getter Routen-Datei exportiert wird:

var getRoutingTable = require('../bin/www').getRouting; 

Nachdem ich diese getRoutingTable Funktion verwende ich ein leeres Array bekam. Was ist der richtige Weg, um diese Variable zu exportieren, damit sie in jeder anderen Projektdatei verwendet und aktualisiert werden kann?

+0

Ich denke, Server-Listenereignis funktioniert nicht. Deshalb bleibt 'routingTable' leer. –

+0

@LalitGoswami Bitte lesen Sie die Beschreibung noch einmal. Wenn ich console.log onListening() -Funktion einlogge, zeigt es Tabelle mit Element hinzugefügt. –

Antwort

0

Ist routingTable in '../bin/www' definiert?

var routingTable = []; 
... 
exports.getRouting = function() { 
    return routingTable; 
}; 
+0

Variable und Exportfunktion stammen aus derselben Datei. –

+0

Welches Ergebnis von console.log (require ('../ bin/www'). GetRouting())? Vielleicht: auf Anwendung ist Start routingTable ist leer, wenn Sie "require (...)" an anderer Stelle ist auch leer und schließlich Routing-Tabelle ist nicht leer, wenn der Server zu hören begann. Versuchen Sie, einen Timer hinzuzufügen und getRouting() erneut aufzurufen. –

+0

Das Ergebnis ist das einzelne Objekt in OnListening() -Funktion geschoben. Ich persönlich denke, dass Timer eine schlechte Lösung ist. Auch benötigt wird auf ** getRouting ** nicht auf eine Variable selbst. –