mysql 在Nodejs中Sequelize在应用程序启动时创建重复的表

yiytaume  于 2023-03-22  发布在  Mysql
关注(0)|答案(2)|浏览(197)

好的。风景:Node,MySql,Sequelize
问题:在创建了一个新的数据模型和迁移(node migrate.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,
};

类查询函数返回可用对象中的数据:

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'),
  };

运行app - DB之前的净结果是好的,显示新表,运行app - DB之后显示dup表。

我是一个相对的新手,一直在绞尽脑汁(并试图在这里找到解决方案)来解决这个问题。
任何建议都很感激!谢谢!

mwngjboj

mwngjboj1#

DOH!对于那些谁是新的像我一样- Sequelize自动创建复数表默认情况下,您可以强制覆盖TP刑罚表名。

j2datikz

j2datikz2#

使用标志“freezeTableName:true”以停止创建重复表。
https://sequelize.org/docs/v6/core-concepts/model-basics/

相关问题