为啥 sequelize.sync() 不同步表,除非我将模态导入文件?
Posted
技术标签:
【中文标题】为啥 sequelize.sync() 不同步表,除非我将模态导入文件?【英文标题】:why sequelize.sync() is not syncing the table unless i import the modals into the file?为什么 sequelize.sync() 不同步表,除非我将模态导入文件? 【发布时间】:2021-07-16 08:15:31 【问题描述】:我正在使用带有 sequelize 的 postgres。我正在尝试在数据库中创建一个 Products 表。在主脚本文件 (app.js) 上,我调用了 sequelize.sync() 以将模式与数据库同步。但是,无论我尝试了多少次,该表都没有在数据库中创建。唯一执行的查询是这个;
Executing (default): SELECT 1+1 AS result
但是,当我将模式导入 app.js 文件时,同步会正常进行。我真的对这种行为感到困惑。
这些是我的文件;
./utils/database.js
const Sequelize = require("sequelize");
module.exports = new Sequelize("mydatabase", "myname", "mypassword",
host: "localhost",
dialect: "postgres",
operatorsAliases: false,
pool:
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
,
);
./modals/product.js
const Sequelize, DataTypes = require("sequelize");
const sequelize = require("../utils/database.js");
const Product = sequelize.define("Product",
id:
type: DataTypes.UUID,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
primaryKey: true,
,
title:
type: DataTypes.STRING,
,
price:
type: DataTypes.DOUBLE,
allowNull: false,
,
imageUrl:
type: DataTypes.STRING,
,
description:
type: DataTypes.STRING,
,
);
// export the Modal
module.exports = Product;
./app.js
const sequelize = require("./utils/database.js");
sequelize.sync()
.then(() =>
// listen
app.listen(3000, () =>
console.log("Server running...");
);
)
.catch((error) =>
console.log(error);
);
以上代码同步失败。但是如果我将模态导入到这个文件中,它工作正常。
const sequelize = require("./utils/database.js");
// importing Product modal
const Product = require("./models/product.js");
sequelize.sync()
.then(() =>
// listen
app.listen(3000, () =>
console.log("Server running...");
);
)
.catch((error) =>
console.log(error);
);
如果要使用sync()函数,是否总是需要将所有modals导入到app.js文件中?
【问题讨论】:
【参考方案1】:稍微改变你的文件结构,尝试如下
./utils/database.js
const Sequelize = require("sequelize");
const sequelize = new Sequelize("mydatabase", "myname", "mypassword",
host: "localhost",
dialect: "postgres",
operatorsAliases: false,
pool:
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
,
);
const db = ;
db.Sequelize = Sequelize;
db.sequelize = sequelize;
module.exports = db;
./modals/product.js
const DataTypes = require("sequelize");
const db = require("../utils/database.js");
const Product = db.sequelize.define("Product",
id:
type: DataTypes.UUID,
defaultValue: db.Sequelize.UUIDV4,
allowNull: false,
primaryKey: true,
,
title:
type: DataTypes.STRING,
,
price:
type: DataTypes.DOUBLE,
allowNull: false,
,
imageUrl:
type: DataTypes.STRING,
,
description:
type: DataTypes.STRING,
,
);
// export the Modal
module.exports = Product;
【讨论】:
含糊不清,根本没有提供解释。请在你的回答中更彻底,并提出一个观点。以上是关于为啥 sequelize.sync() 不同步表,除非我将模态导入文件?的主要内容,如果未能解决你的问题,请参考以下文章
node-sequelize学习笔记二(创建删除表安全检查表表列的数据类型)
Sequelize .sync 函数挂起:来自 serial.klass 的发射器
如何停止执行(默认):DROP TABLE IF EXISTS in sequelize sync
如何在 MySql 中使用 sequelize 运行多个原始查询?