【问题标题】:Sequelize failing to create table with sync()Sequelize 无法使用 sync() 创建表
【发布时间】:2020-09-05 18:15:19
【问题描述】:

我正在学习 node.js 和 mySQL。我已经尝试过 Sequelize 并且根据我的学习源同步应该创建新表(如果不存在)。但由于某种原因,它不会创建新表。

这是我的 database.js 文件

const Sequelize = require('sequelize');

const sequelize = new Sequelize('test-schema', 'root', 'mypassword',{dialect:'mysql', host:'localhost'});

module.exports = sequelize;

这是我的模型产品文件

const Sequelize = require('sequelize');

const sequelize = require('../util/database')

const Product = sequelize.define('product', {
    id: {type: Sequelize.INTEGER, autoIncrement: true, allowNull: false, primaryKey: true},
    title: Sequelize.STRING,
    price: {type: Sequelize.DOUBLE, allowNull: false}
});

module.exports = Product;

这是我的 server.js 文件

const express = require('express');

const sequelize = require('./util/database')

const app = express();


app.get('/',(req,res,next)=>{
    res.send({"id": "1"});
});

sequelize.sync().then(result=>{
    //console.log(result);
    app.listen(3000);
}).catch(err => {
    console.log(err);
});

一旦我启动服务器,我就会得到

Executing (default): SELECT 1+1 AS result

我试图将我的数据库文件中的架构名称更改为错误的名称,但我得到一个错误架构不存在,所以我认为与 db 的连接是正确的

这是我安装的包

  "dependencies": {
    "express": "^4.17.1",
    "mysql2": "^2.1.0",
    "sequelize": "^5.21.10"
  }

【问题讨论】:

  • 您在哪里导入产品文件?
  • @Anatoly 我不导入它。Sequelize 应该遍历sequelize.define 中的所有模型并根据我的学习源创建不存在的表
  • sequelize 如何知道您从不导入的 JS 文件中的模型?
  • @Anatoly 数据库是在 sequelizer 中创建的,它通过sequelize.define 与模型(产品)连接,它也在sequelize.sync() 的 server.js 中启动时运行这是我第一次使用 sequelizer,我已经用我的源代码检查了我的代码 3 次,没有发现任何错误。你认为它应该进口吗?如果是这样,那么在哪里?我认为导入它没有任何意义

标签: mysql node.js sequelize.js


【解决方案1】:

将所有模型定义为函数,以便您可以调用它们在 sequelize 中注册模型,然后在 database.js 中注册模型,就像我在 this answer 中描述的那样。您可以在这个答案的问题中看到如何定义一个像函数一样的模型。

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
    first_name: DataTypes.STRING,
    last_name: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    User.belongsTo(models.Role, { foreignKey: 'role_id' });
  };
  return User;
};

【讨论】:

  • 感谢 Anatoly... 我刚刚使用我的产品文件 const product = require('./models/products') 在我的 server.js 中创建导入,它开始工作。我不明白。我真的不明白...... server.js 中的任何地方都没有使用该导入或常量。这只是一个未使用的导入。我现在要看看你的解决方案..
  • hmm .. 我需要一些时间来完成您的解决方案(我是 node.js 的初学者),但我相信您的解决方案是正确的.. 我仍在试图弄清楚那个未使用的导入背后的逻辑,所以我现在不能专注于其他事情......非常非常感谢你
猜你喜欢
  • 2020-08-28
  • 2020-01-16
  • 2015-07-24
  • 1970-01-01
  • 2018-07-02
  • 2018-08-13
  • 2023-04-04
  • 1970-01-01
  • 2021-01-11
相关资源
最近更新 更多