2016-07-02 3 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 routingTable을 누르면이 단일 객체가 나타납니다. 나는 하늘의 배열을 가지고이 getRoutingTable 기능을 사용하면

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

:

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

이 게터는 루트 파일로 내보낼 :

그런 다음 그 변수에 대한 게터를 만들었습니다. 이 변수를 내보내 다른 모든 프로젝트 파일에서 사용 및 업데이트 할 수있는 올바른 방법은 무엇입니까?

+0

서버 수신 대기 이벤트가 작동하지 않는 것 같습니다. 따라서 'routingTable'이 비어있는 것입니다. –

+0

@LalitGoswami 다시 한번 설명을 읽어주십시오. onListening() 함수에서 console.log를 사용하면 요소가 추가 된 테이블이 표시됩니다. –

답변

0

'../bin/www'에 routingTable이 정의되어 있습니까?

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

변수 및 내보내기 기능이 동일한 파일에서 제공됩니다. –

+0

console.log의 결과 (require ('../ bin/www'). getRouting())? 아마도 : 응용 프로그램에서 시작할 때 routingTable이 비어 있습니다. "require (...)"를 호출하면 다른 곳에서도 비어 있으며 마지막으로 서버가 수신 대기 할 때 라우팅 테이블이 비어 있지 않습니다. 타이머를 추가하고 getRouting()을 다시 호출하십시오. –

+0

결과는 onListening() 함수에서 푸시 된 단일 객체입니다. 나는 개인적으로 타이머가 똑바로 나쁜 해결책이라고 생각한다. 또한 변수 자체가 아닌 ** getRouting **이 필요합니다. –