将模型存储在文件夹中,使用index.js来要求它们全部

我有一个体面的大小项目,我需要做一点调整。

我正在使用mongoose作为我的节点的ORM。 我想把我所有的mongoose模型放在一个名为“模型”的文件夹中。 我已经阅读,当我这样做,我可以把一个index.js文件在模型文件夹,这样将拉入所有模型,并将其存储。

app.js:

... var mongoose = require('mongoose'); var models = require('./models')(mongoose); app.configure(function () { mongoose.connect(dbPath, function(err) { if (err) throw err; }); ... }); // include models in my routes so I need access ... 

我正困在我需要做的index.js返回所有我的模型

index.js(这是我所尝试的,甚至没有closures)

 function Models(mongoose) { var Counters = require('./counters')(mongoose); var User = require('./user')(mongoose); var Token = require('./token')(mongoose); var Team = require('./team')(mongoose); var Role = require('./role')(); var Layer = require('./layer')(mongoose, counters); var Feature = require('./feature')(mongoose, counters, async); } module.exports = Models; 

我也应该从app.js传入mongoose,因为我需要在那里连接到mongo? IE浏览器我可以在index.js再次要求,但我不知道如果在不同的文件中需要相同的模块是不好的做法。

编辑:(这是对我的模型)

对不起忘了提到,我在模型类中添加“访问器”types的function。 IE我想为每个模型提供一个公共接口。

user.js的:

 module.exports = function(mongoose) { // Creates a new Mongoose Schema object var Schema = mongoose.Schema; // Collection to hold users var UserSchema = new Schema({ username: { type: String, required: true }, password: { type: String, required: true }, },{ versionKey: false } ); // Creates the Model for the User Schema var User = mongoose.model('User', UserSchema); var getUserById = function(id, callback) { User.findById(id, callback); } var getUserByUsername = function(username, callback) { var query = {username: username}; User.findOne(query, callback); } return { getUserById: getUserById, getUserByUsername: getUserByUsername } } 

在node.js中,模块在第一次加载后被caching。 所以你不需要从app.js传递mongoose

例如,在models / index.js中:

 require('./counters') exports.User = require('./user') require('./token'); require('./team'); require('./role'); require('./layer'); require('./feature'); // I prefer to use a loop to require all the js files in the folder. 

在models / user.js中:

 var mongoose = require('mongoose'); var userSchema = mongoose.Schema({ // ... Define your schema here }); var User = module.exports = mongoose.model('User', userSchema); module.exports.getUserById = function(id, callback) { User.findById(id, callback); } module.exports.getUserByUsername = function(username, callback) { var query = {username: username}; User.findOne(query, callback); } 

在app.js中:

 var mongoose = require('mongoose'); var models = require('./models'); mongoose.connect(dbPath, function(err) { if (err) throw err; }); // Yes! You can use the model defined in the models/user.js directly var UserModel = mongoose.model('User'); // Or, you can use it this way: UserModel = models.User; app.get('/', function(req, res) { var user = new UserModel(); user.name = 'bob'; user.save(); // UserModel.getUserByUsername(); ... }); 

详细了解node.js中的模块caching: http : //nodejs.org/api/modules.html#modules_caching