sql >> Databasteknik >  >> RDS >> Mysql

Express.js och MySQL-modell + validering

Det finns inget bästa sättet att göra modeller baserade på MySQL. Du kan implementera ditt eget sätt att hantera modeller, men det finns många ORM-moduler tillgängliga för Node.js, jag skulle föreslå att du använder en av dem.

Jag använder Sequelize som ORM för att definiera modeller och interagera med databasen i flera Express-applikationer. En annan ORM för Node som jag har stött på är Bookshelf.js , men det finns många andra. Vilken du ska använda beror på dina preferenser och behov.

EDIT:Exempel på användning

Jag föreslår följande struktur när du använder Sequelize-modeller:en katalog i ditt projekt som heter modeller med en fil för varje modell och en index.js-fil för att ladda Sequelize-miljön. Om du använder Sequelize CLI , den har också flera metoder som följer denna struktur.

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

För fler parametrar och detaljer kan du kolla Sequelize-dokumentet, som är väldigt enkelt och fullt av exempel och detaljer.

Jag har också använt en del ECMAScript 6, så ändra eller transpilera den här koden om din version av Node.js inte stöder dem.




  1. Inkluderar värden som INTE FINNS i MySQL-frågeresultat

  2. Hur man skapar vy i SQL

  3. PHP mysql_stmt::fetch() ger PHP Fatal-felminne uttömt

  4. Joomla! 3 installation fryser vid skapande av databastabell