【问题标题】:Sequelize how not to redefine models every time server starts续集如何在每次服务器启动时不重新定义模型
【发布时间】:2017-08-02 00:53:02
【问题描述】:

在Sequelize教程中,据说单个模型是这样生成的:

const User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING
  },
  lastName: {
    type: Sequelize.STRING
  }
});

然后像这样保存(即创建表):

User.sync().then(() => {
  // do whatever
});

但我希望只做一次,我只需要创建一次表。因此,下次我运行脚本时,如何检索之前使用上述代码定义的模型(即表)。

【问题讨论】:

  • 您的代码已经这样做了。如果您向同步调用提供{ force: true } 选项,则同步只会每次都创建表。在您的情况下,它仅在表不存在时创建表。但请记住,如果您在初始同步后更改架构,那么 Sequelize 以后不会自动将更改添加到您的表中!
  • 好的,谢谢,我明白了,但这有点不合逻辑。
  • 是的。 github.com/sequelize/sequelize/blob/v3/lib/dialects/postgres/… 。有兴趣的可以参考。在 Postgres 中,同步最终使用 CREATE TABLE IF NOT EXISTS

标签: node.js orm sequelize.js


【解决方案1】:

在同步方法中,您可以传递一个选项来避免每次同步数据库表。此选项将确保您的应用程序检查数据库中的表,如果存在则不会创建,否则将创建表。

User.sync(
{force: false}).then(() => {
  // do whatever
});

如果您仍然遇到问题,请告诉我。我正在使用 sequalize,但没有遇到这个问题。

【讨论】:

  • 我发现问题是我需要重新定义模型。 IMO,模型应该只创建一次。然后下次服务器启动时,我只想获取之前运行时创建的模型。
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多