我刚开始在我的应用程序中使用Node.js ORM Sequelize。到目前为止,我已在同一文件中定义了数据库模型,并在我的控制器文件中使用它们来执行基本操作。 以下是我定义模型的方法:
strongify
但是还有另一种方法可以在单独的文件中定义模型,并创建一个加载模型的索引文件。我发现Sequelize的官方文件对我来说不足以低估其用法。我知道如何创建模型和index.js文件但是如何在我的代码中使用这些模型很难找到。 任何人都可以帮我一个非常简单的例子(没有关系),包括单独文件中模型的定义以及它们在其他代码文件中的用法。
答案 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( ... ) )
之类的东西有助于我的工具,因为文件是经过解析而不是动态依赖。
希望这会有所帮助。