Javascript 为什么sequelize.sync()不同步表,除非我将模态导入到文件中?

Javascript 为什么sequelize.sync()不同步表,除非我将模态导入到文件中?,javascript,node.js,database,postgresql,sequelize.js,Javascript,Node.js,Database,Postgresql,Sequelize.js,我正在使用postgres和sequelize。我正在尝试在数据库中创建Products表。在主脚本文件(app.js)上,我调用了sequelize.sync()以将模式与数据库同步。但是,无论我尝试了多少次,表都不是在数据库中创建的。执行的唯一查询是: Executing (default): SELECT 1+1 AS result 但是,当我将模态导入app.js文件时,同步会正常进行。我真的被这种行为弄糊涂了 这些是我的档案 /utils/database.js const { Se

我正在使用postgres和sequelize。我正在尝试在数据库中创建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,
  },
});
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;
const sequelize = require("./utils/database.js");

sequelize.sync()
  .then(() => {

    // listen
    app.listen(3000, () => {
      console.log("Server running...");
    });

    
  })
  .catch((error) => {
    console.log(error);
  });
/modals/product.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,
  },
});
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;
const sequelize = require("./utils/database.js");

sequelize.sync()
  .then(() => {

    // listen
    app.listen(3000, () => {
      console.log("Server running...");
    });

    
  })
  .catch((error) => {
    console.log(error);
  });
/app.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,
  },
});
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;
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文件?

稍微更改一下文件结构,如下图所示 /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;