Метаданные модели базы данных должны быть определены в файле модели или файле миграции? - PullRequest
1 голос
/ 17 июня 2020

Используя sequelize init, я создал модель с миграцией.

Внутри модели. js есть только определение типа каждого атрибута, например

const User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {});

In файл миграции, есть дополнительные параметры, например

...
up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING
      },
      lastName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING,
      },
      password: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
...

Если, например, я хочу сделать электронную почту уникальной, я бы изменил атрибут электронной почты на:

      email: {
        type: Sequelize.STRING,
        unique: true
      },

Мой вопрос в том, является ли хорошая или плохая идея также включить эти дополнительные параметры атрибутов в файл model. js или просто сохранить его простым, сохранив только определения атрибутов (types).

1 Ответ

2 голосов
/ 17 июня 2020

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

поэтому вам не нужно каждый раз обнаруживать, что email_id уже выходит или нет в вызове api .

email: {
      type: Sequelize.STRING(18),
      validate: {
        isUnique(value, next) {
          user.find({
            where: { email: value },
            attributes: ['id']
          }).done((user) => {
            if (user)
              return next('errors.email.unique');

            next();
          });
        }
      }
...