NodeでのSequelize操作MySQLソリューション
3444 ワード
久しぶりにブログを书きましたが、この间は転职に追われていたので、やっと安定して、后ろは全力でNodeに向かいました.
Sequelizeはpromiseベースのリレーショナル・データベースORMフレームワーク(Object-Relational-mapper)で、データベース・マップ・モデルを構築することで、パラメータをクエリーしてデータベースを操作するのに便利ですが、データベースを操作した後のコールバックはすべてpromiseでデフォルトで実現されます.もちろん、ES 7のawait/asyncとpromiseを組み合わせてコードロジックを実現することもでき、より快適に見えます.
インストール
モデルの作成
大規模なプロジェクトを開発する場合、マッピング・テーブルを1つだけ動かす必要はありません.各マッピング・テーブルに独自に構成パラメータを追加し、チーム・コラボレーションで統一的に構成できるようにするには、各マッピング・テーブルにmodelファイルを個別に作成する必要があります.例えばdb_という名前の接続liveのデータベースは、まずすべてのマッピングテーブルに共通するdbを構築することができます.live_config.jsファイルにデータベースを追加する基本的な構成は以下の通りです.
テーブルのビジネス・フィールドの定義
次に、操作が必要なテーブル(t_live)にt_を追加します.live.jsは、次のようになります.
よびだし
ここでawait/asyncを使用してpromiseを組み合わせるとコードがより清新に見えます
PS:現在、最新バージョンのNodeはawait/asyncを正式にサポートしており、Nodeの悩みに対する回答をより楽しくすることができます.
Sequelizeはpromiseベースのリレーショナル・データベースORMフレームワーク(Object-Relational-mapper)で、データベース・マップ・モデルを構築することで、パラメータをクエリーしてデータベースを操作するのに便利ですが、データベースを操作した後のコールバックはすべてpromiseでデフォルトで実現されます.もちろん、ES 7のawait/asyncとpromiseを組み合わせてコードロジックを実現することもでき、より快適に見えます.
インストール
npm install sequelize
npm install mysql
モデルの作成
大規模なプロジェクトを開発する場合、マッピング・テーブルを1つだけ動かす必要はありません.各マッピング・テーブルに独自に構成パラメータを追加し、チーム・コラボレーションで統一的に構成できるようにするには、各マッピング・テーブルにmodelファイルを個別に作成する必要があります.例えばdb_という名前の接続liveのデータベースは、まずすべてのマッピングテーブルに共通するdbを構築することができます.live_config.jsファイルにデータベースを追加する基本的な構成は以下の通りです.
const Sequelize = require('sequelize');
console.log('init dbbase...');
//
var db_live = new Sequelize('dbname', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
}
});
const ID_TYPE = Sequelize.STRING(50);
//
function defineModel(name, attributes) {
//name
//attributes
var attrs = {};
for (let key in attributes) {
let value = attributes[key];
//
if (typeof value === 'object' && value['type']) {
value.allowNull = value.allowNull || false;
attrs[key] = value;
} else {
attrs[key] = {
type: value,
allowNull: false
};
}
}
// ,
attrs.id = {
type: ID_TYPE,
primaryKey: true
};
attrs.createdAt = {
type: Sequelize.BIGINT,
allowNull: false
};
attrs.updatedAt = {
type: Sequelize.BIGINT,
allowNull: false
};
attrs.version = {
type: Sequelize.BIGINT,
allowNull: false
};
//
//attrs
return db_live.define(name, attrs, {
tableName: name,
timestamps: false,
' freezeTableName': true,// s
// isNewRecord 、
hooks: {
beforeValidate: function (obj) {
let now = Date.now();
if (obj.isNewRecord) {
if (!obj.id) {
obj.id = generateId();
}
obj.createdAt = now;
obj.updatedAt = now;
obj.version = 0;
} else {
obj.updatedAt = Date.now();
obj.version++;
}
}
}
});
}
テーブルのビジネス・フィールドの定義
次に、操作が必要なテーブル(t_live)にt_を追加します.live.jsは、次のようになります.
const db_live = require('../db_live_config');
module.exports = db_live.defineModel('t_live', {
email: {
type: db.STRING(100),
unique: true
},
passwd: db.STRING(100),
name: db.STRING(100),
gender: db.BOOLEAN
});
よびだし
const t_live = require('./t_live');
t_live.create({
//
}).then(result => {
//
}).catch(err => {
//
})
ここでawait/asyncを使用してpromiseを組み合わせるとコードがより清新に見えます
(async () => {
var result = await t_live.create({
//
});
//
})();
PS:現在、最新バージョンのNodeはawait/asyncを正式にサポートしており、Nodeの悩みに対する回答をより楽しくすることができます.