sql >> Base de Datos >  >> RDS >> Mysql

Express.js y MySQL modelo + validación

No hay mejor manera de hacer modelos basados ​​en MySQL. Podría implementar su propia forma de manejar modelos, pero hay muchos módulos ORM disponibles para Node.js, le sugiero que use uno de esos.

Yo uso Sequelize como ORM para definir modelos e interactuar con la base de datos en varias aplicaciones Express. Otro ORM para Node con el que me he topado es Bookshelf.js , pero hay muchos otros. Cuál usar depende de tus preferencias y necesidades.

EDITAR:Ejemplo de uso

Sugiero la siguiente estructura al usar modelos de Sequelize:un directorio en su proyecto denominado models con un archivo para cada modelo y un archivo index.js para cargar el entorno de Sequelize. Si usa Sequelize CLI , también tiene varios métodos que siguen esta estructura.

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

usuarios.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 obtener más parámetros y detalles, puede consultar el documento Sequelize, que es muy simple y está lleno de ejemplos y detalles.

Además, he usado algunos ECMAScript 6, así que cambia o transpila este código si tu versión de Node.js no los admite.