javascript - 如何通过sequelize postgres数据库和迁移在服务器重启后幸存下来

标签 javascript node.js sqlite postgresql sequelize.js

在我的 Express 应用程序中,我使用 Sequelize 来管理数据库。这是我的引导代码。

db.sequelize
  .sync({ force: true})
  .complete(function(err) {
    if (err) {
      throw err[0];
    } else {
       //seed
       require('../db/seed')(db);
        app.listen(app.get('port'), function() {
          console.log('express listening on ' + app.get('port'));
        });
    }
});

如您所见,每次我首先启动服务器时,我都会使用硬编码数据为数据库播种。

这是初始化sequelize的代码:

if (process.env.NODE_ENV === 'test') {
  console.log('[test] using in memory database');
  sequelize = new Sequelize('marbles-site-db', null, null, {
    dialect: 'sqlite',
    storage: ':memory:'
  });
} else if (process.env.HEROKU_POSTGRESQL_WHITE_URL) {
  var match = process.env.HEROKU_POSTGRESQL_WHITE_URL
                .match(/postgres:\/\/([^:]+):([^@]+)@([^:]+):(\d+)\/(.+)/);

  sequelize = new Sequelize(match[5], match[1], match[2], {
    dialect: 'postgres',
    protocol: 'postgres',
    port: match[4],
    host: match[3],
    logging: true // false
  });
} else {
  sequelize = new Sequelize('marbles-site-db', null, null, {
    dialect: 'sqlite',
    storage: './db/development.sqlite'
  });
}

如您所见,我使用 SQlite 和平面文件作为开发存储,使用 Postgres 进行生产。

问题是每次我重新启动服务器时,数据库中的数据都会消失。 SQlite 是这样,我想 Postgres 也是这样。

那么即使我重新启动服务器,我必须做什么才能将数据保留在数据库中,这与数据库迁移有关吗?

请注意,初始启动后不需要种子。

最佳答案

sync({force: true }) 主要用于测试,包括用户测试和 Sequelize 内部测试。

sync()CREATE TABLE IF NOT EXISTS,因此理论上它可以在生产环境中使用,因为它永远不会破坏任何现有数据。但是,如果您更改模型中的架构,并且仅进行同步,则不会反射(reflect)在数据库中

因此,在生产环境中您将需要迁移。这意味着您都需要更改您的 Sequelize 模型,并在每次更改某些内容时编写迁移。有人讨论当 Sequelize 模型文件更改时能够自动创建迁移#120但尚未对此进行任何工作

关于javascript - 如何通过sequelize postgres数据库和迁移在服务器重启后幸存下来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25961260/

相关文章:

javascript - React-Redux 中的严格相等 (===) 与浅度相等检查

JavaScript/Ajax 鼠标可选择对象

javascript - 如何在 node-red node exec 中运行命令以启用 LCD 脚本

node.js - 如何在 Node.js 中创建数据驱动测试

sqlite - 如何在 Mac 上安装和运行 SQLite 或 SQL?

javascript - 为什么这个动画 marginTop 函数没有像我预期的那样工作?

javascript - 一段时间后(比如100毫秒)自动调用JS函数

javascript - 如何在 Chrome 中使用 Node 8 检查器?

c# - DbContext 加载缓慢

sql - 查询以查找每周平均值