0

Im working on a project that uses Nodejs and nextjs. Also, Im using sequelize. I tried to create a sectionModel for sectionEditorModel. At first, sequelize created the table without the association, thus I dropped the table from MySQL workbench. Now, it doesn't create the table for section anymore. Any guesses why this happens? My code:

const Sequelize = require("sequelize");
const sequelize = require("../util/database");
const SectionEditor = require("./UserModels/sectionEditorModel");

const Section = sequelize.define("section", {
  idSection: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    allowNull: false,
    primaryKey: true,
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
});

Section.hasMany(SectionEditor, {
  foreignKey: { name: "idSection", unique: true },
  sourceKey: "idSection",
  primaryKey: true,
});

SectionEditor.belongsTo(Section, {
  foreignKey: "idSection",
  targetKey: "idSection",
});

module.exports = Section;

and

    const Sequelize = require("sequelize");
const sequelize = require("../../util/database");

const User = require("./userModel");

const SectionEditor = sequelize.define("sectioneditor", {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
      },
});

module.exports = SectionEditor;

and

const path = require("path");

const express = require("express");
const bodyParser = require("body-parser");
const sequelize = require("./util/database");
const multer = require('multer');

const fileStorage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'files');
  },
  filename: (req, file, cb) => {
    cb(null, new Date().toISOString() + '-' + file.originalname);
  }
});

const fileFilter = (req, file, cb) => {
  if (
    file.mimetype === 'file/pdf') {
    cb(null, true);
  } else {
    cb(null, false);
  }
};


const app = express();

app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, "public")));

app.use(multer({ storage: fileStorage, fileFilter: fileFilter }).single('paperFile')); //expects one file

sequelize.sync( {force: true});

app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
  res.setHeader(
    "Access-Control-Allow-Methods",
    "OPTIONS, GET, POST, PUT, PATCH, DELETE"
  );
  res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
  next();
});

const authRouter = require("./routes/authRouter");
const userRouter = require("./routes/userRouter");
const reviewerRouter = require("./routes/reviewerRouter");

app.use("/auth", authRouter);
app.use("/user", userRouter);
app.use("/reviewer", reviewerRouter);

app.listen(8000);

also my terminal when I try to start server:

Executing (default): DROP TABLE IF EXISTS `sectioneditors`;
Executing (default): DROP TABLE IF EXISTS `selectionassistanteditors`;
Executing (default): DROP TABLE IF EXISTS `vicepresidents`;
Executing (default): DROP TABLE IF EXISTS `chiefeditors`;
Executing (default): DROP TABLE IF EXISTS `grades`;
Executing (default): DROP TABLE IF EXISTS `reviewers`;
Executing (default): DROP TABLE IF EXISTS `users`;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'grades' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'reviewers' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'chiefeditors' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'vicepresidents' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'selectionassistanteditors' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'sectioneditors' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): SELECT CONSTRAINT_NAME as constraint_name,CONSTRAINT_NAME as constraintName,CONSTRAINT_SCHEMA as constraintSchema,CONSTRAINT_SCHEMA as constraintCatalog,TABLE_NAME as tableName,TABLE_SCHEMA as tableSchema,TABLE_SCHEMA as tableCatalog,COLUMN_NAME as columnName,REFERENCED_TABLE_SCHEMA as referencedTableSchema,REFERENCED_TABLE_SCHEMA as referencedTableCatalog,REFERENCED_TABLE_NAME as referencedTableName,REFERENCED_COLUMN_NAME as referencedColumnName FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME = 'users' AND CONSTRAINT_NAME!='PRIMARY' AND CONSTRAINT_SCHEMA='review-platform' AND REFERENCED_TABLE_NAME IS NOT NULL;
Executing (default): DROP TABLE IF EXISTS `grades`;
Executing (default): DROP TABLE IF EXISTS `reviewers`;
Executing (default): DROP TABLE IF EXISTS `chiefeditors`;
Executing (default): DROP TABLE IF EXISTS `vicepresidents`;
Executing (default): DROP TABLE IF EXISTS `selectionassistanteditors`;
Executing (default): DROP TABLE IF EXISTS `sectioneditors`;
Executing (default): DROP TABLE IF EXISTS `users`;
Executing (default): DROP TABLE IF EXISTS `users`;
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`idUser` INTEGER NOT NULL auto_increment , `name` VARCHAR(255) NOT NULL, `surname` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, `username` VARCHAR(255) NOT NULL, `role` VARCHAR(255), `resetToken` VARCHAR(255), `resetTokenExpiration` DATETIME, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`idUser`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `users`
Executing (default): DROP TABLE IF EXISTS `reviewers`;
Executing (default): CREATE TABLE IF NOT EXISTS `reviewers` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `idUser` INTEGER UNIQUE, PRIMARY KEY (`id`), FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `reviewers`
Executing (default): DROP TABLE IF EXISTS `grades`;
Executing (default): CREATE TABLE IF NOT EXISTS `grades` (`id` INTEGER NOT NULL , `grade1` INTEGER NOT NULL DEFAULT 0, `grade2` INTEGER NOT NULL DEFAULT 0, `grade3` INTEGER NOT NULL DEFAULT 0, `grade4` INTEGER NOT NULL DEFAULT 0, `grade5` INTEGER NOT NULL DEFAULT 0, `grade6` INTEGER NOT NULL DEFAULT 0, `grade7` INTEGER NOT NULL DEFAULT 0, `grade8` INTEGER NOT NULL DEFAULT 0, `grade9` INTEGER NOT NULL DEFAULT 0, `grade10` INTEGER NOT NULL DEFAULT 0, `grade11` INTEGER NOT NULL DEFAULT 0, `grade12` INTEGER NOT NULL DEFAULT 0, `grade13` INTEGER NOT NULL DEFAULT 0, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `idUser` INTEGER UNIQUE, PRIMARY KEY (`id`), FOREIGN KEY (`idUser`) REFERENCES `reviewers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `grades`
Executing (default): DROP TABLE IF EXISTS `chiefeditors`;
Executing (default): CREATE TABLE IF NOT EXISTS `chiefeditors` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `idUser` INTEGER UNIQUE, PRIMARY KEY (`id`), FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `chiefeditors`
Executing (default): DROP TABLE IF EXISTS `vicepresidents`;
Executing (default): CREATE TABLE IF NOT EXISTS `vicepresidents` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `idUser` INTEGER UNIQUE, PRIMARY KEY (`id`), FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `vicepresidents`
Executing (default): DROP TABLE IF EXISTS `selectionassistanteditors`;
Executing (default): CREATE TABLE IF NOT EXISTS `selectionassistanteditors` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `idUser` INTEGER UNIQUE, PRIMARY KEY (`id`), FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `selectionassistanteditors`
Executing (default): DROP TABLE IF EXISTS `sectioneditors`;
Executing (default): CREATE TABLE IF NOT EXISTS `sectioneditors` (`id` INTEGER NOT NULL auto_increment , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `idUser` INTEGER UNIQUE, PRIMARY KEY (`id`), FOREIGN KEY (`idUser`) REFERENCES `users` (`idUser`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `sectioneditors`

thanks in advance

  • It seems like you need one place to register all models before you call `sync`. I'd recommend to make model constructor functions in each model module and call all of them in the main DB module where you create a Sequelize instance. Look at my other answer here: https://stackoverflow.com/a/61710568/1376618 to get an idea how to do it – Anatoly Jun 18 '23 at 13:43

0 Answers0