首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么sequelize.sync()不同步表,除非我将modals导入到文件中?

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

Stack Overflow用户
提问于 2021-04-22 06:08:12
回答 1查看 338关注 0票数 0

我在用postgres和后遗症。我试图在数据库中创建一个Products表。在主脚本文件(app.js)上,我调用了sequelize.sync()来将模式与数据库同步。但是,不管我试了多少次,这个表都不是在数据库中创建的。执行的唯一查询是:

代码语言:javascript
运行
复制
Executing (default): SELECT 1+1 AS result

但是,当我将一个模式导入到app.js文件中时,同步就会正常进行。我真的被这种行为弄糊涂了。

这些是我的档案;

./utils/database.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
const sequelize = require("./utils/database.js");

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

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

    
  })
  .catch((error) => {
    console.log(error);
  });

上述代码无法同步。但是如果我将这个模式导入到这个文件中,它就可以正常工作了。

代码语言:javascript
运行
复制
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文件中?

EN

回答 1

Stack Overflow用户

发布于 2021-04-22 11:07:48

稍微改变一下文件结构,尝试如下所示

./utils/database.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67207632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档