在单独的文件中使用Sequelize创建模型并在项目中使用它们

时间:2015-12-15 05:39:08

标签: javascript node.js orm sequelize.js

我刚开始在我的应用程序中使用Node.js ORM Sequelize。到目前为止,我已在同一文件中定义了数据库模型,并在我的控制器文件中使用它们来执行基本操作。 以下是我定义模型的方法:

strongify

但是还有另一种方法可以在单独的文件中定义模型,并创建一个加载模型的索引文件。我发现Sequelize的官方文件对我来说不足以低估其用法。我知道如何创建模型和index.js文件但是如何在我的代码中使用这些模型很难找到。 任何人都可以帮我一个非常简单的例子(没有关系),包括单独文件中模型的定义以及它们在其他代码文件中的用法。

1 个答案:

答案 0 :(得分:1)

将文件中的模型分开是一个缩放因子。基本上,如果你这样做,它几乎总是更好。

您可以查看Ghost及其模特组织,虽然他们不使用续集,但另一个ORM,称为书架。

让我举个例子来说明我如何组织模型:

我有一个包含所有模型的models/文件夹

models/user.js
models/assignment.js

每个模型只导出一个initialize function,用户模型如下所示:

/**
 * Initialize User definition
 *
 * @param sequelize Sequelize Instance
 * @returns {UserClass} Returns the Users model
 */
module.exports = function( sequelize ) {

    /** Create the schema */
    var Model = sequelize.define(
        'user',
        schemaAttributes,
        {
            instanceMethods : instanceMethods,
            classMethods    : classMethods
        }
    );

    /** Adding hooks */
    Model.beforeCreate( storePassword );
    Model.beforeUpdate( storePassword );

    return Model;

};

对于assignment.js看起来几乎相同,但没有挂钩:

/**
 * Initialize Assignment definition
 *
 * @param sequelize Sequelize Instance
 * @returns {AssignmentClass} Returns the Assignment model
 */
module.exports = function( sequelize ) {

    /** Create the schema */
    return sequelize.define(
        'assignment',
        schemaAttributes,
        {
            instanceMethods : instanceMethods,
            classMethods    : classMethods
        }
    );

};

我将模型逐个加载到另一个文件中

现在我有另一个名为database.js的模块,用于管理模型的配置。它看起来像这样:

var user        = require('./models/user.js');
var assignment  = require('./models/assignment.js');
var sequelize   = new Sequelize({...});

var dbUser = user( sequelize );
var dbAssignment = assignment( sequelize );

/** Define relationships */
dbUser.hasManu( dbAssignment );

module.exports = {
    user : dbUser,
    assignment : dbAssignment
};

使用此而不是require( fs.readDirSync( ... ) )之类的东西有助于我的工具,因为文件是经过解析而不是动态依赖。

希望这会有所帮助。