我在用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文件中?
发布于 2021-04-22 11:07:48
稍微改变一下文件结构,尝试如下所示
./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;
https://stackoverflow.com/questions/67207632
复制相似问题