Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Express.js e modelo MySQL + validação


Não existe a melhor maneira de fazer modelos baseados no MySQL. Você pode implementar sua própria maneira de lidar com modelos, mas há muitos módulos ORM disponíveis para Node.js, eu sugiro usar um deles.

Eu uso Sequelizar como ORM para definir modelos e interagir com o banco de dados em diversas aplicações Express. Outro ORM para Node que encontrei é Bookshelf.js , mas existem muitos outros. Qual usar depende de suas preferências e necessidades.

EDIT:Exemplo de uso

Sugiro a seguinte estrutura ao usar modelos do Sequelize:um diretório em seu projeto chamado models com um arquivo para cada modelo e um arquivo index.js para carregar o ambiente do Sequelize. Se você usar a Sequelize CLI , também possui vários métodos que seguem essa estrutura.

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

Para mais parâmetros e detalhes, você pode conferir o doc do Sequelize, que é bem simples e cheio de exemplos e detalhes.

Além disso, usei alguns ECMAScript 6, portanto, altere ou transpile este código se sua versão do Node.js não oferecer suporte a eles.