2012-12-02 38 views
5

Tôi cần xuất mô-đun cơ sở dữ liệu mongoose của mình, vì vậy tôi có thể sử dụng các mô hình được xác định từ mọi mô-đun trong chương trình của mình.Xuất mô-đun cơ sở dữ liệu mongoose

Ví dụ, mô-đun database.js của tôi trông giống như thế:

var mongoose = require('mongoose'), 
    db = mongoose.createConnection('mongodb://localhost/newdb'), 
    Schema = mongoose.Schema; 

db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function callback() { 
    console.log("Connected to database newdb"); 

    var dynamicUserItemSchema = new mongoose.Schema({ 
     userID: Number, 
     rank: Number, 
    }); 

    var staticUserItemSchema = new mongoose.Schema({ 
     _id: Schema.Types.Mixed, 
     type: Schema.Types.Mixed, 
    }); 

    var DynamicUserItem = db.model('DynamicUserItem', dynamicUserItemSchema); 
    var StaticUserItem = db.model('StaticUserItem', staticUserItemSchema); 

}); 

Tôi muốn có thể thêm var db = require('../my_modules/database'); cho bất kỳ mô-đun khác chương trình của tôi - vì vậy tôi sẽ có thể sử dụng các mô hình như thế:

db.DynamicUserItem.find(); hoặc item = new db.DynamicUserItem({});

có thể làm điều đó bằng "xuất khẩu" hoặc "xuất khẩu mô-đun"? Cảm ơn.

Trả lời

19

Tôi thường không sử dụng erroropen sự kiện và làm theo ví dụ từ mongoosejs để tạo kết nối đến db của tôi. Sử dụng ví dụ bạn có thể làm như sau.

db.js

var mongoose = require('mongoose'); 
var db = mongoose.createConnection('localhost', 'test'); 

var schema = mongoose.Schema({ name: 'string' }); 
var Cat = db.model('Cat', schema); 

module.exports = Cat; // this is what you want 

và sau đó trong app.js của bạn, bạn có thể làm điều gì đó như

var Cat = require('db'); 

var peter = new Cat(); 

Hy vọng rằng sẽ giúp!

+0

Cảm ơn zeMirco. để nói rằng mọi mô hình đều nằm trong một tệp khác? – Daniel

+0

tùy thuộc vào bạn. Bạn có thể xuất nhiều mô hình từ một tệp (ví dụ: 'exports.Cat = Cat' và' exports.Dog = Dog') hoặc gắn với một mô hình cho mỗi tệp. Đối với sau này tôi sẽ sử dụng một tập tin cấu hình toàn cục cho các tham số kết nối cơ sở dữ liệu. – zemirco

1

Nếu bạn đang sử dụng express, sau đó tôi sẽ đặt các mô hình trong app.settings. Bạn có thể làm một cái gì đó như thế này lúc config:

app.configure(function() { 
    app.set('db', { 
     'main'  : db 
    , 'users' : db.model('User') 
    }) 
}) 

Sau đó bạn sẽ có thể sử dụng các mô hình như req.app.settings.db.users, hoặc bạn có thể tạo ra một cách để có được những db var trong file bạn muốn theo những cách khác.

Câu trả lời này không phải là một ví dụ hoàn chỉnh, nhưng hãy nhìn vào dự án khởi động của tôi rằng thiết lập nhanh và cầy mangut trong một dễ dàng để sử dụng cách tương đối: https://github.com/mathrawka/node-express-starter

+0

Tôi nghĩ rằng đây không không thêm bất kỳ giá trị nào trên hệ thống mô-đun nút/commonjs chuẩn và kết hợp mã của bạn với hệ thống cấu hình của express mà không có lý do gì. Chỉ cần KISS với mô-đun commonjs. –

+0

Có, nó kết hợp nó với tốc độ cao và giúp dễ dàng truy cập vào những thứ phổ biến hơn như mô hình mongoose.Đối với các ứng dụng sản xuất, đôi khi các phương pháp đơn giản không đủ kiên cường. – staackuser2

4

Bạn có thể sử dụng xuất khẩu để xác định một mô-đun có thể được yêu cầu ở nơi khác:

./models/list.js

var ListSchema = new Schema({ 
    name    : { type: String, required: true, trim: true } 
    , description : { type: String, trim: true } 
}); 

module.exports = db.model('List', ListSchema); 

./routes/list.js

var list = module.exports = {}; 

var List = require('../models/list'); 

list.get = function(req, res){ 
     List.find({ user: user._id }).exec(function(err, lists){ 
      res.render('lists', { 
       lists: lists, 
      }); 
     }); 
    }); 
}; 

./app.js

app.get('lists', routes.lists.get); 
+1

db - nó được xác định ở đâu? nó là toàn cầu? –

1

Là một thêm vào câu trả lời được chấp nhận, nếu bạn muốn xuất nhiều mô-đun bạn có thể làm:

Trong db.js:

var my_schemas = {'Cat' : Cat, 'Dog': Dog}; 
module.exports = my_schemas; 

Sau đó, trong app.js:

var schemas = require('db'); 
var Cat = schemas.Cat; 
var Dog = schemas.Dog; 
Cat.find({}).exec({...}); 
Các vấn đề liên quan