2016-07-02 6 views
0

エクスプレスアプリケーションでルーティングテーブルをエクスポートする際に問題があります。 参照をエクスポートし、ポインタnode.jsをエクスポートします

var routingTable = []; 

は、その後、私はちょうどイベントをリスニングサーバーを使用して新しいルーティングオブジェクトをプッシュしていますシンプルなルーティングを作成する:/bin/www.jsファイル内

まず私は、ルーティングテーブルをreporesents私のグローバル変数を得ました。

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" 
    }); 
} 

私がconsole.logのルーティングテーブルを押すと、この単一のオブジェクトが得られます。私は空の配列を得た。このgetRoutingTable機能を使用した後

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

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

このゲッターは、routesファイルにエクスポートされます。

は、その後、私は、その変数のgetterを作成しました。この変数をエクスポートして、他のすべてのプロジェクトファイルで使用および更新できる正しい方法は何ですか?

+0

サーバーリスニングイベントが機能していないと思います。そのため、「routingTable」は空白のままです。 –

+0

@LalitGoswami説明をもう一度お読みください。 onListening()関数でconsole.logを実行すると、要素が追加されたテーブルが表示されます。 –

答えて

0

routingTableは '../bin/www'で定義されていますか?

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

変数とエクスポート関数は同じファイルからのものです。 –

+0

console.logの結果(require( '../ bin/www')。getRouting())?おそらく、アプリケーションでは、ルーティングテーブルが空であるため、「require(...)」と呼ぶと他の場所でも空になり、サーバがリッスンを開始したときにルーティングテーブルが空になりません。タイマーを追加して、getRouting()をもう一度呼び出してみてください。 –

+0

結果は、onListening()関数でプッシュされた単一オブジェクトです。私は個人的にタイマーはまっすぐな悪い解決策だと思う。また、** getRouting **は変数自体ではなく必須です。 –

関連する問題