Express.js и модель MySQL + проверка

0

Я разрабатываю приложение, используя Node.js и Express framework. Я нашел много примеров моделирования данных с использованием MongoDB, но для моего проекта требуется база данных SQL.

Может ли кто-нибудь сделать простое объяснение, что является лучшим способом создания моделей на основе MySQL?

Также мне интересно, как обеспечить более позднюю проверку этих моделей. Может быть, я должен определить атрибуты проверки внутри каждого из них?

Теги:
express
validation
model

1 ответ

2
Лучший ответ

Не существует лучшего способа создания моделей на основе MySQL. Вы можете реализовать свой собственный способ обработки моделей, но для Node.js доступно много модулей ORM, я бы предложил использовать один из них.

Я использую Sequelize как ORM для определения моделей и взаимодействия с базой данных в нескольких приложениях Express. Еще одна ORM для Node, с которой я столкнулся, - это Bookshelf.js, но есть много других. Какой из них использовать, зависит от ваших предпочтений и потребностей.

РЕДАКТИРОВАТЬ: Пример использования

Я предлагаю следующую структуру при использовании моделей Sequelize: каталог в вашем проекте с именем models с файлом для каждой модели и файл index.js для загрузки среды Sequelize. Если вы используете Sequelize CLI, у него также есть несколько методов, которые следуют этой структуре.

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 : "th1S1s@c0mpL3xP4sSw0rD",
  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 их не поддерживает.

  • 0
    Спасибо за ваш ответ, о Sequelize. Я уже разработал всю схему БД, позволяет ли этот модуль использовать готовую (существующую) БД?
  • 0
    Да, вы можете использовать на уже существующих БД. Просто учтите, что при запуске метода Sequelize.sync () структура БД синхронизируется с моделями и может привести к изменению структуры. Я использую Sequelize на существующей БД, не сгенерированной с помощью Sequelize (она используется несколькими другими приложениями без Sequelize), и я избегаю выполнения метода синхронизации. В этом случае могут возникнуть некоторые ошибки, если модель устарела. Но это проблема, если ваши модели используются для создания структуры БД. Надеюсь, это поможет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню