sql >> データベース >  >> RDS >> Mysql

Express.jsとMySQLモデル+検証

    MySQLに基づいてモデルを作成する最良の方法はありません。モデルを処理する独自の方法を実装することもできますが、Node.jsで使用できるORMモジュールは多数あるため、そのうちの1つを使用することをお勧めします。

    続編 を使用しています ORMとしてモデルを定義し、いくつかのExpressアプリケーションでデータベースと対話します。私が遭遇したノードのもう1つのORMは、Bookshelf.js です。 、しかし他にもたくさんあります。どちらを使用するかは、好みや必需品によって異なります。

    編集:使用例

    Sequelizeモデルを使用する場合は、次の構造をお勧めします。各モデルのファイルとSequelize環境をロードするためのindex.jsファイルを含むmodelsという名前のプロジェクト内のディレクトリ。 SequelizeCLI を使用する場合 、この構造に従ういくつかのメソッドもあります。

    index.js

    const fs = require("fs");
    const path = require("path");
    const Sequelize = require("sequelize");
    let sqize = new Sequelize({
      host     : "1.2.3.4",
      port     : 1234,
      database : "testDb",
      username : "pino",
      password : "[email protected]",
      dialect: 'mysql',
    });
    
    fs.readdirSync(__dirname).filter(function(file) {
      return (file.indexOf(".") !== 0) && (file !== "index.js");
    }).forEach(function(file) {
      let model = sequelize.import(path.join(__dirname, file));
      db[model.name] = model;
    });
    
    Object.keys(db).forEach(function(modelName) {
      if ("associate" in db[modelName]) {
        db[modelName].associate(db);
      }
    });
    
    db.sequelize = sequelize;
    db.Sequelize = Sequelize;
    db.op        = Sequelize.Op;
    
    module.exports = {
      sqize: sqize,
      Sequelize: Sequelize,
      op: Sequelize.Op
    };
    

    users.js

    module.exports = function (sequelize, DataTypes) {
      let users = sequelize.define('users', {
        username: {
          type: DataTypes.STRING(255),
          allowNull: true
        },
        firstname: {
          type: DataTypes.STRING(255),
          allowNull: true
        },
        secondname: {
          type: DataTypes.STRING(255),
          allowNull: true
        },
        email: {
          type: DataTypes.STRING(255),
          allowNull: true
        },
        type: {
          type: DataTypes.INTEGER(4),
          allowNull: true,
          references: {
            model: 'users_type',
            key: 'id'
          }
        },
        password: {
          type: DataTypes.STRING(255),
          allowNull: true
        },
        salt: {
          type: DataTypes.STRING(255),
          allowNull: true
        }
      }, {
        tableName: 'users'
      });
    
      users.associate = function (models) {
        users.belongsTo(models.user_types, {
          foreignKey: "type",
          as: "userType"
        });
        users.hasMany(models.user_logs, {
          foreignKey: "user_id",
          as: "userLogs"
        });
      };
    
      return users;
    };
    

    その他のパラメータと詳細については、非常にシンプルで例と詳細が満載のSequelizeドキュメントを確認してください。

    また、私はいくつかのECMAScript 6を使用したので、Node.jsのバージョンがそれらをサポートしていない場合は、このコードを変更またはトランスパイルします。




    1. 生のSQLからSQLAlchemyへ

    2. MySQLDDLをOracleDDLに自動的に変換するにはどうすればよいですか?

    3. PHPのPassword_verify

    4. MySQLバックアップのベストプラクティス