【问题标题】:Can't create table in database using class model in Sequelize无法使用 Sequelize 中的类模型在数据库中创建表
【发布时间】:2021-01-11 17:07:21
【问题描述】:

我正在使用带有 express 和 sequelize 的 node.js,我的数据库是 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;

谢谢!

【问题讨论】:

    标签: javascript mysql node.js orm sequelize.js


    【解决方案1】:

    我认为您忘记要求Sequelize,如您上面提到的文档中所示

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

    如果您希望模型自动创建表格,您可以在项目中使用sequelize.sync

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

    【讨论】:

    • 感谢您的回复,但我尝试添加 2 个代码部分,但没有成功
    • 查看这个github.com/Arya4514/Node_Shop repositories 模型目录,也许它会有所帮助。
    【解决方案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() 方法。

      【讨论】:

      • @Arya 早早回答了。所以,这应该是被接受的答案。
      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 2020-01-28
      • 2019-10-28
      • 2014-07-06
      • 2023-01-29
      • 2019-06-25
      • 2021-06-02
      • 2020-09-05
      相关资源
      最近更新 更多