2013-02-15 12 views
7

これは恥ずかしい初心者の質問ですが、私はSequelizejsに関する心配を解決したいと思います。自分のソースを整理しておくために、各モデルをそれぞれのファイルに分割したいと思います。そのためには、各ファイルの先頭にrequire("sequelize')var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password');が必要です。モデルごとに別々のファイルを使用したSequelizejsのNodej

私の質問は、モデルごとにデータベースへの新しい接続を作成することですか、それとも同じ接続を再使用し続けますか?私は "ファイルごとに1つのモデル"という概念全体を放棄し、マスターの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

0

EcmaScript 6のアプローチを使用する場合は、Sequelizeのマニュアルhereに説明があるgrateの例があります。

// 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 
    }) 
}) 
関連する問題