2013-02-15 42 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 
    }) 
})