【问题标题】:How to organize models in a node.js website?如何在 node.js 网站中组织模型?
【发布时间】:2014-06-14 00:30:03
【问题描述】:

我刚刚开始尝试使用 node.js 构建网站,在组织我的项目模型时遇到了问题。

我在 Internet 上找到的所有真实世界示例都使用 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

但是我必须在每个模型文件上写这些小的页眉和页脚有点烦人,直接违反了“不要重复自己”的原则。此外,虽然不是一个大问题,但这是一种内存泄漏,因为“sequelize”对象永远不会被释放。

有没有更好的方法,这是我没有想到的?

【问题讨论】:

    标签: javascript node.js orm express sequelize.js


    【解决方案1】:

    您可以在此处找到有关使用 sequelize 处理模型的文章:http://sequelizejs.com/articles/express#the-application

    您基本上只需创建一个models/index.js,如下所述:http://sequelizejs.com/articles/express#block-3-line-0

    之后,您只需将模型定义放在模型文件夹中的文件中,如下所示:http://sequelizejs.com/articles/express#block-4-line-0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2011-10-09
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      相关资源
      最近更新 更多