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

标签 mysql node.js sequelize.js

好的。横向: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;


我已经隔离了我认为的问题 - 我将模型包含在我的索引 Controller 上的一个变量中以用于我的功能。
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,
};


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


在我运行应用程序之前,净结果很好 - DB 显示新表,运行应用程序之后 - DB 显示 dup 表。

我是一个相对的菜鸟,一直在绞尽脑汁(并试图在这里找到解决方案)来解决这个问题。我之前已经在其他迁移中完成了此操作,没有任何问题。

任何建议表示赞赏!谢谢!

最佳答案

哦!对于像我这样的新手 - Sequelize 默认自动创建复数表,您可以强制覆盖 tp 单数表名。

关于mysql - 在应用程序启动时在 Nodejs 中创建重复表的 Sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61548963/

相关文章:

javascript - 发送消息时不和谐机器人出错

javascript - 奇怪的 Express Jade View 缓存行为

mysql - FindAll 在 Sequelize 查询中包含更多表

javascript - Sequelize : SQL injection in findOne?

node.js - 带有嵌套插入的sequelize.js

mysql - Workbench 和 InnoDB 错误 150 varchar FK

c# - Xamarin、MySQL 异常 : unable to connect to any specific host

mysql - SQL 相当于 MySqlDbType 枚举值?

php - GROUP BY 外键还是主键?

javascript - node.js、heroku 中的错误状态 413 是什么意思?