2012-08-07 8 views
0

에 전달 MySQL의 연결은 내가 필요로하거나 client.query(..)를 사용하여 MySQL의 매개 변수를 재정의하지 않고, 기본적으로 routes/에서 다른 스크립트를 볼 수있는 방법을 app.js에 필요한 모든 매개 변수를 사용하여 MySQL의 연결을 정의?익스프레스 - 스크립트

+0

가능한 복제 (http://stackoverflow.com/questions [제대로 express.js와 경로에 MySQL의 연결을 전달하는 방법]/16800418/how-to-proper-pass-mysql-connection-to-express-js) – edjroot

+0

@EdJr 무엇이든 .. 질문 사이의 날짜 차이를 보았습니까? 2012 년 7 월 7 일과 2013 년 5 월 28 일 ... 차이점을 직접 확인할 수 있습니까? – Gntem

+0

이 질문에 플래그가 부여 된 좋은 이유가 있습니다.[this] (https://meta.stackoverflow.com/a/315475/3089595)는 추론을 멋지게 요약하고, 복제본 자체에 대한 (유용한) 링크가 있다는 사실이 또 다른 좋은 예입니다. – edjroot

답변

3

이 같은 다른 스크립트로 mysql을 연결 삽입 할 수 있습니다

var mysqlConnection = new Conection(params); 
require('controller/main.js)(mysqlConnection); 

main.js

을 app.js를
module.exports = function(mysqlConnection) { 
    // You can access your mysql connection here 
}; 

UPDATE :

당신은 삽입 할 수 같은 방법으로 여러 변수.

module.exports = function(app, mysqlConnection) { 
    var methods = {}; 
    // mysql connection and app available from here 
    methods.list = function(cb) { 
     mysqlConnection.list(function(err, data) { 
      cb(err, data); 
     }); 
    }; 

    return methods; 
}; 
+0

require를 사용하여 mysqlConnection을 가지고있는 곳에, 나는 app 변수를 전달한다. 거기에 추가 변수를 전달할 수 있는가? '에 대한 많은 문서를 찾지 못했습니다. – Gntem

+0

응답 업데이트 확인 –

+0

예 멋지게 보입니다. – Gntem

3

내가 사용하는 패턴은 내 db 객체를 설정하는 것입니다

var mysqlConnection = new Conection(params); 
var news = require('model/news.js)(app, mysqlConnection); 
news.list(function(err, news) { 
    // Do something 
}); 

news.js을 app.js :이 필요한 경우에도 당신은 여전히 ​​모듈에서 방법을 내보낼 수 있습니다

//I haven't used real mysql in node so excuse the pseudo-syntax: 
var db = require('mysql-driver-thingy'); 
db.connect('localhost', 'sqlport', options...); 
db.otherSetupFunctions(); 
console.log("Finished db setup. You should only see this message once! Cool."); 

module.exports = db; 

을 (의이 utils/mySQL.js를 호출하자) 그리고 나는 REQU 수 있습니다 모듈은 한 번 내보낼 나는 db 개체를 도처에 내가 필요로한다. require이 캐시되기 때문에 실제로는 설정 방법을 여러 번 호출하지 않습니다.

에서 app.js : 모델 /의 user.js에서

var db = require('./utils/mySQL.js'); 
... 

:

var db = require('../utils/mySQL.js'); 
... 

하지 않는 것이 좋습니다 마지막 옵션은 글로벌 네임 스페이스를 오염하는 것입니다. 심지어 그것을 필요로하지 않고,

//set up your db 
... 
// and now make it available everywhere: 
global.client = db.client 

이제 마법처럼 모든 모듈에서 클라이언트 객체를 사용할 수 있습니다 : 이것은 당신이 후에 정말이야 해답이 될 것으로 보인다.

하지만, 많은 이유의 전역 나쁜 있습니다 : 당신의 코드와 다른 코드가 전역을 정의하면

  • , 그들은 충돌 서로를 덮어 쓸 수 있습니다.
  • 그것은 당신이 db/client 오브젝트 등을 정의 위치를 ​​찾기 어렵다
+0

이 방법을 사용하면 mysqlConnection()을 전달할 필요가 없습니다. '를 @ Vadim의 답변에서와 같이 모든 모듈에 추가합니다. – rdrey

+0

다시 한번'user.js'에서 mysql 연결을 요구하고, 다른 대답은 한번 요구하면'module.exports.list = function (req, res, mysql)'과 같은 것을 할 수 있습니다. .. – Gntem

관련 문제