导出mongoose数据库模块

时间:2012-12-02 10:47:15

标签: javascript node.js mongodb express 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({});

是否可以使用“导出”或“模块导出”来做到这一点?感谢。

4 个答案:

答案 0 :(得分:22)

我通常不使用erroropen事件,并按照mongoosejs中的示例创建与我的数据库的连接。使用该示例,您可以执行以下操作。

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

希望有所帮助!

答案 1 :(得分:6)

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

./模型/ list.js

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

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

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

答案 2 :(得分:2)

如果您使用快递,那么我会将模型放在app.settings中。您可以在配置时执行以下操作:

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

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

这个答案不是一个完整的例子,但请看一下我的初学者项目,该项目以相对简单易用的方式设置express和mongoose:https://github.com/mathrawka/node-express-starter

答案 3 :(得分:1)

作为对已接受答案的补充,如果您想要导出多个模块,您可以这样做:

在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({...});