2017-10-25 2 views
0

컨트롤러에서 나는 config/db을 요구했지만 여러 데이터베이스를 가질 수 있기 때문에 데이터베이스 이름을 가진 매개 변수를 보내야합니다.노드 js - 필요 매개 변수를 전달하는 방법

그래서 컨트롤러에서 나는이 작업을 수행 :

var mssql = require("mssql"); 

console.log('DATABASE'); 

if(db == 'Emp1') 
{ 
    var config = 
    { 
    user: "user", 
    password: "pass", 
    server: "ip", 
    database: "Emp1" 
    } 
} 
else if(db == 'Emp2') 
{ 
    var config = 
    { 
    user: "user", 
    password: "pass", 
    server: "ip", 
    database: "Emp2" 
    } 
} 

var connection = new mssql.Connection(config); 

connection.connect(function(err) 
{ 
    console.log(err); 
}); 

module.exports = connection; 

그래서 내가 올바른 방법으로 컨트롤러에서 값을 전달 해요 : config/db에서

"use strict"; 
var connection = require('../config/db', function(db) 
{ 
    var db = "Emp1"; 
}); 
var connection = require('../config/db'); 
var mssql = require('mssql'); 
var request = new mssql.Request(connection); 
var parser = require('json-parser'); 
var squel = require("squel"); 

class RecpetionController 
{ 
    init(app) 
    { 
    app.get("/", (req, res) => this.index.call(this, req, res)); 
    } 

    index(req, res) 
    { 
    console.log('Index reception') 
    } 

} 
module.exports = RecpetionController; 

내가이 있나요?

config/db의 값은 어떻게받을 수 있습니까?

config/db I console.log(arguments)에서 나에게 데시벨 값으로 모든 필드를 표시하지 않는 경우

...

는 어떻게하면 해결할 수 있습니다.

node-cache을 사용하여 config/db의 db 이름을 얻는 것이 더 좋습니다.

고맙습니다.

답변

1

수 없습니다. 따라서 대신 config/db은 연결이 아닌 연결을위한 팩토리를 반환합니다. 다음 ...

var mssql = require("mssql"); 

module.exports = function getConnection(db, callback) { 
    if (db == 'Emp1') { 
     var config = { 
      user: "user", 
      password: "pass", 
      server: "ip", 
      database: "Emp1" 
     } 
    } 
    else if (db == 'Emp2') { 
     var config = { 
      user: "user", 
      password: "pass", 
      server: "ip", 
      database: "Emp2" 
     } 
    } 

    var connection = new mssql.Connection(config); 

    connection.connect(function(err) { 
     callback(err, connection); 
    }); 
}; 

과 같이 사용 : 오래된 스타일의 노드 콜백 방법은 (이 완벽하게 의미 개념 아닌)이 처럼 보일 것이다

var connection = require('../config/db')('Emp1', function(err, connection) { 
    // Use `err` and `connection` here 
}); 

또는 connect 호출에서 연결 만들기를 분리하고 연결을 사용하는 모듈이 connect을 수행하게 할 수 있습니다. 그것에 접근하는 많은 방법.


더 현대적인 API는 (자신을 위해, 그리고 async/await 사용할 수 있도록) 약속을 사용 : 다음

var mssql = require("mssql"); 

module.exports = function getConnection(db, callback) { 
    return new Promise(function(resolve, reject) { 
     if (db == 'Emp1') { 
      var config = { 
       user: "user", 
       password: "pass", 
       server: "ip", 
       database: "Emp1" 
      } 
     } 
     else if (db == 'Emp2') { 
      var config = { 
       user: "user", 
       password: "pass", 
       server: "ip", 
       database: "Emp2" 
      } 
     } 

     var connection = new mssql.Connection(config); 
     connection.connect(function(err) { 
      if (err) { 
       reject(err); 
      } else { 
       resolve(connection); 
      } 
     }); 
    }); 
}; 

require('../config/db')('Emp1') 
    .then(function(connection) { 
     // Use `connection` here 
    }) 
    .catch(function(err) { 
     // Use `err` here 
    }); 

에서을 위의 코드는 ES5 구문을 사용했습니다 (모듈을 사용하면 약속을 제공 할 수 있습니다. ld 버전의 노드), 현재 코드가 ES2015 + 기능을 사용하지 않는 것으로 보입니다.


마지막 : 다음

var configs = { 
    Emp1: { 
     user: "user", 
     password: "pass", 
     server: "ip", 
     database: "Emp1" 
    }, 
    Emp2: { 
     user: "user", 
     password: "pass", 
     server: "ip", 
     database: "Emp2" 
    } 
}; 

var config = configs[db]; 

아마도 심지어 파일에서로드 ...

: I는 객체 나 Map를 사용하도록 설정 선택을 변경 좋을 것
+0

감사합니다. @TJCrowder, 작동! 데이터베이스 이름을 저장하는 더 좋은 방법은 무엇입니까? 캐시에? 로그인에서 사용자는 데이터베이스를 선택해야하며 로그인 컨트롤러에서 캐시의 데이터베이스 이름을 설정하려고합니다. 그것에 대해 어떻게 생각하세요? 고맙습니다. – user3242861

+0

@ user3242861 :이 예에서는 "캐시"가 무슨 뜻인지 알지 못합니다. 저장 위치는 앱의 전체 구조에 따라 다릅니다. –

관련 문제