2012-03-13 3 views
22

나는 Mongoose을 사용하여 Mongo 데이터베이스를 관리하고 있습니다. 내 연결 파일은 매우 간단하다 : 내 app.js 나는 단지mongoose/node.js와 데이터베이스 연결 매개 변수를 공유하는 가장 좋은 방법

require('./database) 

하고 "몽구스"변수가 전 세계적으로 볼 수있는 그런

var mongoose = require('mongoose') 

mongoose.connection.on("open", function(){ 
    console.log("Connection opened to mongodb at %s", config.db.uri) 
}); 
console.log("Connecting to %s", config.db.uri) 
mongoose.connect(config.db.uri) 

global.mongoose = mongoose 

. 전역 (적어도 직접적으로)을 사용하지 않는 것을 선호합니다. 거기에 단일 노드 패턴이나 다른 방법을 통해 노드 (나는 express.js를 사용하고있어)를 통해 데이터베이스 연결 변수를 공유하는 더 좋은 방법이 있습니까?

+0

5 월이 중복 될 수 있습니다. http://stackoverflow.com/questions/9651066/how-can-i-structure-my-express-app-where-i-only-need-to-open-a-mongodb-connectio/ 9653519 # 9653519 –

답변

29

I을 사용할 수 있습니다 필요할 수 있습니다 저희가 귀하의 모듈 이름이 connection.js라고하자 따르는 경우 내 app.js 파일에서 다음을 수행하십시오.

이 때 할 수있는 모델에 액세스해야하는 모든 파일에서
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://address_to_host:port/db_name'); 
modelSchema = require('./models/yourmodelname').YourModelName; 
mongoose.model('YourModelName', modelSchema); 
// TODO: write the mongoose.model(...) command for any other models you have. 

6,: 마지막으로

var mongoose = require('mongoose'); 
YourModelName = mongoose.model('YourModelName'); 

그리고이 모델에서, 당신은 일반적으로 기록 된 파일이 맨 아래에 내보낼 수 있습니다 :

module.exports.YourModelName = YourModelName; 

이것이 가장 훌륭한 솔루션 (약 2 일 전에 모듈을 내보내는 것에 대해 머리를 감싸기 시작한 것)이 맞는지는 모르겠지만 작동하지 않습니다. 이것이 좋은 방법인지 누군가가 말할 수 있습니다.

+0

오, 좋아, 내가 그것을 필요로 할 수 있기 때문에 "몽구스"를 가리키는 전역 변수가 필요하지 않습니다. – typeoneerror

+0

네, 제가 알고있는 한 멀리 모듈을 캐싱 할 것입니다. 그래서 한 번 몽구스가로드되면, 익스프레스가 처음부터 다시로드 할 필요는 없습니다. 누군가가 확실히 확인할 수 있다면 멋지 겠지만, 나는 과거의 그 어딘가를 읽었다는 것을 확실히 확신합니다. – AntelopeSalad

+0

익스프레스 캐싱에 대해서는 잘 모르겠지만로드하는 모듈에 캐시가 필요하다는 것을 알고 있습니다. –

6

당신은 commonjs 수출

exports.mongoose = mongoose 

당신이

var mongoose = require('connection.js') 

당신은 몽구스 연결

2

나는 일반적으로

var MySchema = (function(){ 
//Other schema stuff 

//Public methods 
GetIdentifier = function() { 
return Id; 
}; 

GetSchema = function() { 
return UserSchema; 
}; 

return this; 
})(); 

if (typeof module !== 'undefined' && module.exports) { 
exports.Schema = MySchema; 
} 

처럼 내 모델을 감싸 그리고 내 메인 클래스에서,이 var schema = require('./schema.js').Schema;을하고 연결 호출, 또는 createConnection 후 conn.model(schema.GetIdentifier(), schema.GetSchema()) 물론 전화. 이를 통해 표준 메소드 세트에 스키마를 플러그인 할 수 있습니다. 이 일반화는 연결 및 오류 처리를 마스터 한 후에 스키마에 집중할 수 있기 때문에 유용합니다. 또한 플러그인을 사용하여 스키마를 확장하고,이를 통해 다른 스키마와 플러그인을 공유 할 수 있습니다.

나는 어떤 몸이 이것을 잘 해내 었는지를보고 싶었지만, 좋은 패턴을 찾기 위해 볼 수 없었고 나는 상당히 몽고를 처음 보았습니다.

이 정보가 도움이되기를 바랍니다.

관련 문제