我刚开始尝试使用node.js构建网站,我在组织项目模型时遇到了一个问题。
我在互联网上找到的所有现实世界的例子都使用的是Mongoose。该库允许您以静态方式定义模型。所以你可以这样写:
// models/foo.js
module.exports = require('mongoose').model('Foo', ...);
// app.js
mongoose.connect(...);
// some_controller_1.js
var Foo = require('./models/foo');
Foo.find(...);
// some_controller_2.js
var Foo = require('./models/foo');
Foo.find(...);
但由于我不想使用MongoDB,我需要另一个ORM。而我发现的所有其他ORM都不允许这样做。首先需要创建一个实例,然后才能注册模型。他们似乎也不允许访问注册模型列表。
所以我试着这样做:
// models/user.js
var registrations = [];
module.exports = function(sequelize) {
var result = null;
registrations.forEach(function(elem) {
if (elem.db == sequelize)
result = elem.value;
});
if (result) return result;
// data definition
var user = sequelize.define("User", ...);
registrations.push({ db: sequelize, value: user });
return user;
};
我可以使用它:
// some_controller_1.js
var Foo = require('./models/foo')(app.get('database'));
Foo.find(...); // using Foo
但是我必须在每个模型文件上写的这些小页眉和页脚都有点烦人,直接违反了“不要重复自己”#34;原理。此外,虽然不是一个大问题,但这是一种内存泄漏,因为" sequelize"对象永远不会被释放。
有没有更好的方法,我没想过?
答案 0 :(得分:0)
您可以在此处找到有关使用sequelize处理模型的文章:http://sequelizejs.com/articles/express#the-application
您基本上只需按照此处所述创建models/index.js
:http://sequelizejs.com/articles/express#block-3-line-0
之后,您只需将模型定义放在models文件夹中的文件中,如下所示:http://sequelizejs.com/articles/express#block-4-line-0