导出mongoose数据库模块

我需要导出我的mongoose数据库模块,所以我可以使用我的程序中的每个模块定义的模型。

例如,我的database.js模块看起来像这样:

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

我想能够添加var db = require('../my_modules/database'); 到任何其他模块我的程序 – 所以我将能够使用这样的模型:

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

有可能使用“出口”或“模块出口”吗? 谢谢。

我通常不使用erroropen事件,并按照从mongoosejs的示例创build一个连接到我的数据库。 使用这个例子,你可以做到以下几点。

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 

然后在你的app.js中,你可以做类似的事情

 var Cat = require('db'); var peter = new Cat(); 

希望有所帮助!

您可以使用导出来定义其他地方可能需要的模块:

./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); 

如果你使用快递,那么我会把模型放在app.settings中。 你可以在configuration的时候这样做:

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

然后你就可以使用像req.app.settings.db.users这样的模型,或者你可以创build一种方法来以其他方式获取你想要的文件中的db var。

这个答案不是一个完整的例子,但看看我的起动器项目,设置expression和mongoose相对容易使用的方式: https : //github.com/mathrawka/node-express-starter

作为接受答案的添加,如果您想导出多个模块,您可以执行:

在db.js中:

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

然后在app.js中:

 var schemas = require('db'); var Cat = schemas.Cat; var Dog = schemas.Dog; Cat.find({}).exec({...});