2014-04-25 15 views
5

Tôi có một cấu trúc thư mụcxuất khẩu và tái sử dụng kết nối mongoose tôi trên nhiều mô hình

./lib 
./lib/model1.js 
./lib/model2.js 

Cả hai mô hình kết nối cho trường MongoDB tương tự sử dụng mongoose, nhưng xác định mô hình khác nhau:

// model1.js 
var mongoose = require ('mongoose'); 
mongoose.connect ('bla') 
var db = mongoose.connection; 

var schema1, model1; 

db.on('error', console.error.bind(console, 'database, why you no connect?')); 

db.once('open', function callback() { 

    schema1 = mongoose.Schema({ 
    // some properties 
    }); 

    model1 = mongoose.model1 ('model1', schema1); 

}); 

là gì cách tốt nhất để tạo kết nối cơ sở dữ liệu một lần và tái sử dụng nó cho mỗi mô hình? Cấu trúc thư mục tốt nhất là gì? Có thể ./lib/middleware/db.js?

This question có vẻ liên quan nhưng sử dụng mô-đun mongodb npm thay vì mongoose, câu hỏi không rõ ràng và tất cả nhận xét của tác giả đã bị xóa.

Trả lời

9

Bạn chỉ nên gọi mongoose.connect một lần, trong mã khởi động của ứng dụng. Điều đó sẽ tạo hồ bơi kết nối mặc định cho ứng dụng của bạn.

Các tệp model1.jsmodel2.js tạo mô hình của chúng qua cuộc gọi tới mongoose.model liên kết chúng với kết nối mặc định.

Vì vậy, nó thực sự được xử lý cho bạn bởi Mongoose.

+2

Vì vậy, @JohnnyHK, tôi chỉ muốn xác minh điều gì đó. Bạn có nói rằng mọi người không thực sự phải xuất khẩu các đối tượng mongoose bất cứ nơi nào nó được họ kết nối với dbs của họ khi họ luôn luôn có cùng một đối tượng trong suốt mã khi chỉ đơn giản bằng cách sử dụng yêu cầu ('mongoose') tuyên bố? – alaboudi

+2

@alaboudi Đúng vậy. – JohnnyHK

7

Trong ./app.js:

var mongoose = require('mongoose'); 
mongoose.connect('connStr'); //connect once 

Trong ./lib/model1.js:

var mongoose = require('mongoose'); 
var model1 = mongoose.model('model1', { 
    foo1: { type: String, required: false}, 
    bar1: { type: String, required: false} 
}); 
module.exports = model1; 

Trong ./lib/model2.js:

var mongoose = require('mongoose'); 
var model2 = mongoose.model('model2', { 
    foo2: { type: String, required: false}, 
    bar2: { type: String, required: false} 
}); 
module.exports = model2; 

Sau đó, sử dụng các mô hình như thế này (Ví dụ :/routes.js):

var model1 = require('./lib/model1.js'); 
var m1 = new model1({ 
    foo: 'value_for_foo', 
    bar: 'value_for_bar' 
}); 

m1.save(function (err) { 
    if (err) {console.log(err.stack);}  
    console.log('saving done...'); 
}); 
+1

nếu tôi có nhiều kết nối thì sao? mongoose không hoạt động nữa –

+0

@badrslaoui Vui lòng tham khảo câu trả lời SO này: http://stackoverflow.com/a/19475259/2013487 –

+0

Nhận xét về chuỗi cũ nhưng điều này dường như không hoạt động nữa. Bất kỳ ý tưởng làm thế nào để làm điều đó ngay bây giờ? – iWillBeMaster

Các vấn đề liên quan