NodeでのSequelize操作MySQLソリューション

3444 ワード

久しぶりにブログを书きましたが、この间は転职に追われていたので、やっと安定して、后ろは全力で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の悩みに対する回答をより楽しくすることができます.