我有一个体面的项目,我需要进行一些重组.
我使用mongoose作为节点的ORM.我想将所有猫鼬模型放在一个名为'models'的文件夹中.我已经读过,当我这样做时,我可以将一个index.js文件放在models文件夹中,这样就可以拉入所有模型并存储它们.
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
...
Run Code Online (Sandbox Code Playgroud)
我正在陷入我在index.js中需要做的事情,以便返回我的所有模型
index.js(这是我试过的,甚至没有关闭)
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;
Run Code Online (Sandbox Code Playgroud)
我应该从app.js传入mongoose,因为我需要连接到mongo吗?IE我可以在index.js中再次要求它,但我不确定在不同的文件中是否需要相同的模块是不好的做法.
编辑:(这是我的模型)
对不起忘了提到我在我的模型类中添加了'accessor'类型函数.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
}
}
Run Code Online (Sandbox Code Playgroud)
lui*_*uin 20
在node.js中,模块在第一次加载后被缓存.所以你不需要mongoose从app.js传递.
例如,在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.
Run Code Online (Sandbox Code Playgroud)
在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);
}
Run Code Online (Sandbox Code Playgroud)
在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();
...
});
Run Code Online (Sandbox Code Playgroud)
了解有关node.js中模块缓存的更多信息:http: //nodejs.org/api/modules.html#modules_caching
另一种以简单而干净的方式调用所有模型的非常好的方法可能就是这样:
项目结构:
.
??? app.js
??? models
??? Role.js
??? Team.js
??? User.js
Run Code Online (Sandbox Code Playgroud)
app.js
const fs = require('fs');
const path = require('path');
const modelsPath = path.resolve(__dirname, 'models')
fs.readdirSync(modelsPath).forEach(file => {
require(modelsPath + '/' + file);
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14815 次 |
| 最近记录: |