4.0

2014-07-12 5 views
2

내가 개발, 데이터베이스에 액세스 할 필요가있는 복수 경로가 내가 호스팅 데이터베이스를 사용하는 로컬 데이터베이스, 분명히 생산을 사용하여 한 노드/Express에서 전역 변수를 선언 할 수 있나요4.0

유일한 문제는 릴리스를 진행할 때마다 데이터베이스 링크를 수동으로 변경하는 각 경로를 거쳐야합니다.

예 :

var mongodb = require('mongojs').connect('urlhere', ['Collection']);

나는이 경우 사람이 알고 있나요 var mongodb = require('mongojs').connect(app.get('mongoDBAddress'), ['Collection']);

같이 할 각 파일에 다음

app.set('mongoDBAddress', 'urlhere');

처럼 app.js에 뭔가를 변수를 선언 할 수 있다면 그것은 좋은 것입니다 달성 할 수있는 나는 약 1 시간 동안 그것으로 주위에 어지럽히고 있었고, 다른 물건을 포함하려고 노력하고 있었다. 그러나 나는 운 없음을 가지고있다. 감사. docs에서

답변

2

: 브라우저에서

는 최상위 범위는 전역 범위이다. 즉, 브라우저에서 이 글로벌 범위 인 경우 var something은 전역 변수를 정의합니다. Node에서는 이것이 다릅니다. 최상위 범위는 전체 범위가 이 아닙니다. 노드 모듈 내의 var something은 인 에 로컬 인 입니다.

조금 다르게 생각해야합니다. 대신 전역 객체를 만드는 그들이 예를 들어, app 인스턴스를 가지고, 그래서 당신의 모듈을 만들 :

// add.js 
module.exports = function(app) { // requires an `app` 
    return function add(x, y) { // the actual function to export 
    app.log(x + y) // use dependency 
    } 
} 

// index.js 
var app = {log: console.log.bind(console)} 
var add = require('./add.js')(app) // pass `app` as a dependency 

add(1, 2) 
//^ will log `3` to the console 

이것은 Express에서 규칙 및 기타 라이브러리입니다. app이 주 파일 (즉, index.js)에 있고, 필요한 모듈에 app 매개 변수가 있습니다.

GLOBAL에 전역 변수를 추가 할 수 있습니다.이 값은 this question을 참조하십시오. 이는 잘못된 행동으로 간주 될 수 있습니다.

+1

아니요. 전체 범위가 있으며 모듈의 최상위 범위가 아닙니다. 첫 번째 문장은 마치 모든 모듈이 자체 * 전역 * 범위를 가진 것처럼 들리지만 사실이 아닙니다. – Bergi

+0

@Bergi : 예 ... 설명서의 인용문 만 남겨 두겠습니다. – elclanrs

0

모듈 내에 변수를 공유하기 위해 node.js에는 두 가지 메소드가 있습니다.

  • 글로벌
  • module.export 그러나 문제는 다른 것 같다, 무슨 내가 가진 것은 당신이 코드를 변경하지 않고 다른 데이터베이스에 응용 프로그램을 연결할 수 있습니다. 당신이해야 할 것은 명령 줄을 사용하는 것은

    For more ref

    서버를 PARAMS.JS

    var connectTo = { 
        dev : "url1" 
        production : "url2" 
    } 
    
    var mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); 
    

    는 diffrent 모듈에서 연결을 공유하려면

    node server.js dev 
    // for connecting to development database 
    

    또는

    node server.js production 
    // for connecting to prodiction database 
    

    로 server.js를 실행

    //Method 1 
    global.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); 
    
    //Method 2 
    exports.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); 
    
    exports.getMongoDBAddress = function() { 
        return connectTo[process.argv[2]] 
    }