sql >> Databáze >  >> RDS >> Mysql

Express.js a MySQL model + validace

Neexistuje žádný nejlepší způsob, jak vytvářet modely založené na MySQL. Můžete implementovat svůj vlastní způsob zpracování modelů, ale pro Node.js je k dispozici mnoho modulů ORM, doporučuji použít jeden z nich.

Používám Sequelize jako ORM k definování modelů a interakci s databází v několika aplikacích Express. Další ORM pro Node, na který jsem narazil, je Bookshelf.js , ale existuje mnoho dalších. Který z nich použít, závisí na vašich preferencích a potřebách.

UPRAVIT:Příklad použití

Při použití modelů Sequelize doporučuji následující strukturu:adresář ve vašem projektu s názvem models se souborem pro každý model a soubor index.js pro načtení prostředí Sequelize. Pokud používáte Sequelize CLI , má také několik metod, které se řídí touto strukturou.

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;
};

Další parametry a podrobnosti najdete v dokumentu Sequelize, který je velmi jednoduchý a plný příkladů a podrobností.

Také jsem použil nějaký ECMAScript 6, takže pokud je vaše verze Node.js nepodporuje, změňte nebo transpilujte tento kód.




  1. Parametrizovaný dotaz SQL s LIKE '% ? %' PHP

  2. Laravel Nelze odstranit nebo aktualizovat nadřazený řádek:omezení cizího klíče se nezdaří

  3. Jak napsat dotaz, který dělá něco podobného jako GROUP_CONCAT MySQL v Oracle?

  4. Proč commit nezpůsobí uváznutí