2013-02-15 40 views
7

这是一个令人尴尬的初学者问题,但我只是想解决我对Sequelizejs的担忧。我想将每个模型分成它自己的文件以保持我的源代码组织。为了做到这一点,我需要在每个文件的开头都有require("sequelize')var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password');Nodejs与Sequelizejs使用单独的文件模型

我的问题是,将创建一个新的连接到每个模型的数据库,或者它会不断重新使用相同的连接?我是否应该放弃“每个文件一个模型”的概念,并创建一个主要的Models.js文件?

我对Node非常陌生,我仍然习惯于它的约定。谢谢您的帮助!

回答

10

每个模型定义自己的模块,它导出:

module.exports = function(sequelize, DataTypes){ 
    return sequelize.define('Brand', { 
     name: { 
      type: DataTypes.STRING, 
      unique: true, 
      allowNull: false }, 
     description: { 
      type: DataTypes.TEXT, 
      allowNull: false }, 
     status: { 
      type: DataTypes.INTEGER, 
      unique: false, 
      allowNull: true } 
    }) 
}; 

然后,只需导入模块在初始化Sequelize(你可以导入这里的许多型号):

var Sequelize = require("sequelize"); 
var config = require("../../config/config.js"); 
var sequelize = new Sequelize(config.database, config.username, config.password, 
    { dialect: config.dialect, host: config.host, port: config.port, 
     omitNull: true, logging: false }); 
var Brand = require("./Brand").Brand; 

您可以在http://nodejs.org/api/modules.htm上阅读更多关于模块的内容,但上面的例子可以帮助您开始。

+2

我刚刚发现了一个非常类似于您发布的解决方案。唯一的区别是我使用'sequelize.import('./ File')'函数。无论哪种方式工程虽然!感谢您的另一种选择。 – KayoticSully 2013-02-15 11:45:19

0

如果您想使用EcmaScript 6方法,请在Sequelize文档here中提供解释的例子。

// in your server file - e.g. app.js 
const Project = sequelize.import(__dirname + "/path/to/models/project") 

// The model definition is done in /path/to/models/project.js 
// As you might notice, the DataTypes are the very same as explained above 
module.exports = (sequelize, DataTypes) => { 
    return sequelize.define("project", { 
    name: DataTypes.STRING, 
    description: DataTypes.TEXT 
    }) 
} 

导入方法也可以接受回调作为参数。

sequelize.import('project', (sequelize, DataTypes) => { 
    return sequelize.define("project", { 
    name: DataTypes.STRING, 
    description: DataTypes.TEXT 
    }) 
})