2015-12-15 40 views
2

我剛開始在我的應用程序中使用Node.js ORM Sequelize。到目前爲止,我已經在同一個文件中定義了數據庫模型,並在我的控制器文件中使用它們來完成基本操作 這裏是我定義的模型:在單獨文件中使用Sequelize創建模型並在項目中使用它們

var sqlize = require("sequelize"); 
var sq = new sqlize('test', 'root', 'root', { 
host: 'localhost', 
dialect: 'mysql', 

pool: { 
    max: 5, 
    min: 0, 
    idle: 10000 
} 
}); 







function services(){ 

var ser = sq.define('services',{ 

    idservices: { 
     type: sqlize.INTEGER, 
     autoIncrement: true, 
     primaryKey: true 

    }, 
    title:  sqlize.STRING, 
    des:  sqlize.TEXT, 
    vendor:  sqlize.STRING, 
    rating:  sqlize.STRING, 
    pricing_hr: sqlize.STRING, 
    pricing_mn: sqlize.STRING, 
    size:  sqlize.STRING, 
    cpu:  sqlize.STRING, 
    ram:  sqlize.STRING, 
    os:   sqlize.STRING, 
    img_path: sqlize.STRING 
}); 

sq.sync(); 



return ser; 

} 



function category(){ 

var category = sq.define('category',{ 
    id: { 
     type: sqlize.INTEGER, 
     autoIncrement: true, 
     primaryKey: true 

    }, 
    category: sqlize.STRING, 
    sid: sqlize.INTEGER 

},{ 

    freezeTableName: true, 
    timestamps: false 
}); 

sq.sync(); 



return category; 

} 


function cat(){ 

var cat = sq.define('cat',{ 
    idcat: { 
     type: sqlize.INTEGER, 
     autoIncrement: true, 
     primaryKey: true 

    }, 
    cat: sqlize.STRING 

},{ 

    freezeTableName: true, 
    timestamps: false 
}); 

sq.sync(); 



return cat; 

} 



exports.services=services; 
exports.category=category; 
exports.cat=cat; 

但有你定義在單獨的文件模型和創建,你加載你的模型索引文件的另一種方式。我發現Sequelize的官方文檔不足以讓我忽略這個用法。我知道如何創建模型和index.js文件,但如何在我的代碼中使用這些模型很難找到。 任何人都可以請一個非常簡單的例子(沒有關係)幫助我,其中包括模型在單獨文件中的定義以及它們在其他代碼文件中的用法。

回答

2

編輯

我解決了我的問題。現在我的模型在單獨的文件中,並在我的代碼中使用它們。以下是我定義我的模型文件services.js

module.exports = function(sequelize, DataTypes) { 

return sequelize.define('services',{ 

    idservices: { 
     type: DataTypes.INTEGER, 
     autoIncrement: true, 
     primaryKey: true 

    }, 
    title:  DataTypes.STRING, 
    des:  DataTypes.TEXT, 
    vendor:  DataTypes.STRING, 
    rating:  DataTypes.STRING, 
    pricing_hr: DataTypes.STRING, 
    pricing_mn: DataTypes.STRING, 
    size:  DataTypes.STRING, 
    cpu:  DataTypes.STRING, 
    ram:  DataTypes.STRING, 
    os:   DataTypes.STRING, 
    img_path: DataTypes.STRING 
}); 


}; 

然後使用sequelize。通過要求index.js這樣

var Sequelize = require('sequelize'); 


// initialize database connection 
var sequelize = new Sequelize('test', 'root', 'root', { 
host: 'localhost', 
dialect: 'mysql', 

pool: { 
    max: 5, 
    min: 0, 
    idle: 10000 
} 
}); 

// load models 
var models = [ 
'services', 
'serviceCategory', 
'category' 
]; 
models.forEach(function(model) { 
module.exports[model] = sequelize.import(__dirname + '/' + model); 
}); 



// export connection 
module.exports.sequelize = sequelize; 

現在我可以在我的項目的任何文件使用這些模型:

//********************************************* 
//Sequlize models to handle database commands; 
var models = require('../models/index.js'); 
var s  = models.services;    //Services table handler 
var sc  = models.serviceCategory;  //Service Category table handler 
var ca  = models.category;    //Category table handler 

現在,如果你想使用進口的index.js我已經導入我的所有車型服務模型選項,您可以使用服務模型對象:

s.create({title: "anything"}).then(function(task){ 

    task.save; 
}); 
1

分離文件中的模型是一個縮放因子。基本上,如果你這樣做幾乎總是更好。

你可以看看Ghost和他們的模型組織,雖然他們不使用sequelize,但另一個ORM稱爲bookshelf。

讓我給你舉個例子,我如何安排我的模型:

我已經包含了所有車型一個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(...))幫助我的工具,因爲文件被解析並不能動態依賴。

希望這會有所幫助。

相關問題