Не удается создать таблицу в базе данных, используя модель класса в Sequelize

#javascript #mysql #node.js #orm #sequelize.js

#javascript #mysql #node.js #orm #sequelize.js

Вопрос:

Я использую node.js с помощью express и sequelize, а моя база данных — mysql. Я попытался создать модель класса, как написано в документации: https://sequelize.org/master/manual/model-basics.html . Я смог подключиться к базе данных, но не смог понять, как синхронизировать модель с базой данных для создания таблиц. вот моя пользовательская модель:

 const { DataTypes, Model } = require('sequelize');
const connection = require("../server");

export class User extends Model { }

User.init({
    id: {
        type: DataTypes.BIGINT,
        autoIncrement: true,
        primaryKey: true,
        unique: true,
        allowNull: false
    },
    username: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: true,
    },
    password: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    userType: {
        type: DataTypes.STRING,
        allowNull: false,
    }
}, {
    connection
});
  

и вот мой server.js:

 const express = require("express");
const Sequelize = require("sequelize");

const app = express();
const port = 8080;

const connection = new Sequelize("coupons2", "root", "1234", {
    host: "localhost",
    dialect: "mysql"
})

connection.sync()
    .then(() => {
        console.log("Connection to DB was successful");
    })
    .catch(err => {
        console.error("Unable to connect to DB", err);
    });

app.listen(port, () => {
    console.log(`Server is running on port ${port}`);
})

module.exports = connection;
  

Спасибо!

Ответ №1:

Я думаю, вы забыли потребовать Sequelize , как показано в документе, который вы упомянули выше

 `const {Sequelize, DataTypes, Model } = require('sequelize');
  

и если вы хотите, чтобы эта таблица создавалась автоматически по моделям, которые вы можете использовать sequelize.sync в своем проекте

 await sequelize.sync({ force: true });
console.log("All models were synchronized successfully.");
  

Комментарии:

1. спасибо за ваш ответ, но я попытался добавить 2 раздела кода, и это не сработало

2. проверьте это github.com/Arya4514/Node_Shop каталог моделей репозиториев, возможно, это могло бы чем-то помочь.

Ответ №2:

  • User.sync() — создает таблицу, если она не существует (и ничего не делает, если она уже существует)
  • User.sync({ force: true }) — создает таблицу, сначала удаляя ее, если она уже существовала
  • User.sync({ alter: true }) — проверяет текущее состояние таблицы в базе данных (какие столбцы в ней есть, каковы их типы данных и т. Д.), А Затем выполняет необходимые изменения в таблице, чтобы она соответствовала модели.
 (async () => {
    await sequelize.sync({ alter: true });
})();
  

Ответ №3:

Мне удалось создать таблицы, импортировав модели в мой server.js : const models = require("./src/models/index"); , и с помощью метода sync().

Комментарии:

1. @Arya ответил рано. Итак, это должен быть принятый ответ.