2012-03-13 25 views
22

Tôi đang sử dụng Mongoose để quản lý cơ sở dữ liệu Mongo. tập tin kết nối của tôi khá đơn giản:Cách tốt nhất để chia sẻ thông số kết nối cơ sở dữ liệu với mongoose/node.js

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 

Sau đó, trong app.js của tôi, tôi chỉ

require('./database) 

và "cầy mangut" biến có sẵn trên toàn cầu. Tôi không muốn sử dụng globals (ít nhất là không trực tiếp). Có cách nào tốt hơn để chia sẻ các biến kết nối cơ sở dữ liệu trên nút (tôi đang sử dụng express.js) thông qua một mẫu đơn hoặc một số phương pháp khác?

+0

Mayby sao chép http://stackoverflow.com/questions/9651066/how-can-i-structure-my-express-app-where-i-only-need-to-open-a-mongodb-connectio/ này 9653519 # 9653519 –

Trả lời

29

tôi chỉ cần làm như sau trong tệp app.js của tôi:

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. 

Tại thời điểm này bất kỳ tập tin đó cần truy cập vào mô hình mà có thể làm:

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

Và cuối cùng trong mô hình của bạn, bạn có thể có các tập tin văn bản bình thường sau đó xuất khẩu ở phía dưới:

module.exports.YourModelName = YourModelName; 

Tôi không biết đây có phải là giải pháp tuyệt vời nhất hay không (chỉ bắt đầu gói đầu của tôi xung quanh xuất mô-đun khoảng 2 ngày trước) nhưng nó hoạt động. Có lẽ ai đó có thể bình luận nếu đây là một cách hay để làm điều đó.

+0

oh, ok, vì vậy tôi không cần một biến toàn cầu trỏ đến "mongoose" bởi vì tôi có thể yêu cầu nó khi tôi cần nó. – typeoneerror

+0

Vâng, cũng như xa như tôi biết rõ ràng sẽ mô-đun bộ nhớ cache bạn tải. Vì vậy, một khi mongoose được nạp một lần, nó không giống như thể hiện sẽ tiếp tục tải lại nó từ đầu cho mỗi yêu cầu. Sẽ thật tuyệt nếu ai đó có thể xác nhận chắc chắn nhưng tôi khá chắc chắn rằng tôi đã đọc ở đâu đó trong quá khứ. – AntelopeSalad

+0

Tôi không biết về bộ nhớ đệm tốc hành, nhưng tôi biết yêu cầu lưu trữ các mô-đun mà nó tải. –

6

nếu bạn làm theo commonjs xuất khẩu

exports.mongoose = mongoose 

chúng ta hãy nói tên mô-đun của bạn là connection.js

bạn có thể yêu cầu

var mongoose = require('connection.js') 

bạn có thể sử dụng kết nối mongoose

2

Tôi thường quấn mô hình của tôi như thế này

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; 
} 

Và trong lớp học chính của tôi, tôi làm var schema = require('./schema.js').Schema; này và gọi conn.model(schema.GetIdentifier(), schema.GetSchema()) và dĩ nhiên là sau khi gọi kết nối, hoặc createConnection. Điều này cho phép tôi chèn lược đồ vào tập hợp các phương thức tiêu chuẩn. Sự khái quát hóa này là tốt vì bạn có thể tập trung vào lược đồ của mình sau khi bạn đã nắm vững kết nối và xử lý lỗi. Tôi cũng mở rộng lược đồ bằng các plugin và cho phép tôi chia sẻ các plugin với các lược đồ khác.

Tôi đang tìm xem liệu một số cơ thể đã làm điều này tốt hơn, nhưng không thể thấy được một mô hình tốt và tôi khá mới với Mongo.

Tôi hy vọng điều này sẽ hữu ích.

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