Последовательность в Nodejs создание дублирующих таблиц при запуске приложения - PullRequest
0 голосов
/ 01 мая 2020

Хорошо. Ландшафт: Узел, MySql, Sequelize

Проблема: после создания новой модели данных и миграции (миграция узла. js, которая создает просто отлично), при запуске приложения Sequelize создает дублирующуюся таблицу (а также пересылает данные формы к новой таблице).

Пример: db.virtual_class является главной таблицей, и при запуске также создается db.virtual_classes.

Моя модель:

const Sequelize = require('sequelize');
const sequelize = require('../sequelize');

const model = sequelize.define('virtual_class', {
  id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true }, 
  style: Sequelize.STRING, // e.g. Style of class
  description: Sequelize.STRING(1024), // e.g. class Details
  jwt_secret: Sequelize.STRING, // e.g. rando string to be used to gen unique keys for every room
});

module.exports = model;

Я выделил, что Я думаю, что проблема в том, что я включаю модель в переменную моего контроллера индекса для своих функций.

const Virtual_class = require('./model');
const classQuery = require('./classQuery');

async function addClass({ style, description, secret }) {
    const vClass = await Virtual_class.create({
      style,
      description,
      jwt_secret: secret,
    }, { raw: true });

    return classQuery(vClass);
}

module.exports = {
    addClass,
};

Функция Class Query для возврата данных в пригодный для использования объект:

function classQuery(queryResult) {
    if (!queryResult) {
      return null;
    }

    return {
      id: queryResult.id,
      style: queryResult.style,
      description: queryResult.description,
      secret: queryResult.jwt_secret,
    };
  }

  module.exports = classQuery;

и миграция:

module.exports = {
    up: (sequelize, Sequelize) => sequelize.getQueryInterface().createTable('virtual_class', {
      id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        primaryKey: true,
        autoIncrement: true,
      },
      style: {
        type: Sequelize.STRING,
      },
      description: {
        type: Sequelize.STRING,
      },
      jwt_secret: {
        type: Sequelize.STRING,
      },
      createdAt: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.fn('now'),
      },
      updatedAt: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.fn('now'),
      },
    }),

    down: sequelize => sequelize.getQueryInterface().dropTable('virtual_class'),
  };

Net Результат хорош до запуска приложения - БД показывает новую таблицу, После запуска приложения - БД показывает таблицу дублирования.

DB TABLE VIEW

Я относительный нуб, и я ломаю голову (и пытаюсь найти здесь решения) этой проблемы. Я делал это раньше с другими миграциями без проблем.

Любой совет приветствуется! Спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

DOH! Для тех, кто новичок, как я - Sequelize автоматически создает множественные таблицы по умолчанию, вы можете принудительно переопределить имена таблиц в единственном числе.

...