如何在Sequelize中同步所有模型?执行sync()未生成数据表
问题原因及解决方法
核心问题
你的代码里没有正确初始化Product模型,仅导入了模型函数但未执行,导致Sequelize实例无法识别该模型,因此不会创建对应的数据表。
解决步骤
修改同步文件中注册模型的代码:
// 原错误代码 db.product = Product // 修改为 db.product = Product(sequelize, DataTypes)
完整修正后的同步文件代码
const { Sequelize, DataTypes } = require('sequelize'); const dbConfig = require('./config/dbConfig'); const Product = require('./models/product') const sequelize = new Sequelize( dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { host: dbConfig.HOST, dialect: dbConfig.dialect, operatorsAliases: false, pool: { max: dbConfig.pool.max, min: dbConfig.pool.min, aquire: dbConfig.pool.aquire, idle: dbConfig.pool.idle } } ) sequelize.authenticate() .then(() => { console.log("Connected to the database successfuly !"); }).catch((err) => { console.log("Error: " + err) }) const db = {} db.Sequelize = Sequelize db.sequelize = sequelize // 执行模型函数,将模型关联到Sequelize实例 db.product = Product(sequelize, DataTypes) db.sequelize.sync({ force: true }) .then(() => { console.log("re-sync done!"); }) module.exports = db
补充说明
- 模型文件导出的是接收
sequelize和DataTypes参数的函数,必须调用该函数并传入对应参数,才能让模型与你的Sequelize实例绑定。 - 若有多个模型,需按相同方式逐一初始化,比如
db.user = User(sequelize, DataTypes),确保sync()能识别所有需要创建的数据表。
内容的提问来源于stack exchange,提问作者Muhammad Essam
相关产品推荐
相关产品推荐

