[英]Exporting a mongoose database module
我需要导出我的猫鼬数据库模块,以便可以使用程序中每个模块的定义模型。
例如,我的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({});
是否可以使用“导出”或“模块导出”来做到这一点? 谢谢。
我通常不使用error
和open
事件,而是按照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();
希望有帮助!
您可以使用导出来定义其他地方可能需要的模块:
./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);
如果您使用的是Express,那么我会将模型放入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
作为已接受答案的补充,如果要导出多个模块,可以执行以下操作:
在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({...});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.