顺序化umzug迁移

Sra*_*van 1 node.js sequelize.js umzug

我正在使用sequelize js和开发一个node js application,将其部署到生产环境并具有实时数据库。

而在发展模式下,如果我需要alterDB,我以前用做它Sequelize.sync({ force: true })和它的工作好。

但是现在,开发完成后,我想更改表并向其中添加列。

我搜索了许多帖子,但没有获得有关如何运行这些迁移的确切示例。

我尝试使用Umzug并运行迁移,但是这使我出错。

这是我尝试的代码,

migrations / barmigration.js:

  var Sequelize = require('sequelize');

"use strict";

module.exports = {

    up: function(migration, DataTypes) {
      return [
      migration.addColumn(
        'Bars',
        'PrinterId',
        Sequelize.STRING
      ),
      migration.addColumn(
        'Bars',
        'PrinterStatus',
        Sequelize.STRING
      )]

    },

    down: function(migration, DataTypes) {
        return
         [
            migration.removeColumn('Bars', 'PrinterStatus'),
            migration.removeColumn('Bars', 'PrinterId')
        ]
    }

};
Run Code Online (Sandbox Code Playgroud)

这是umzug configuration

 var Umzug = require('umzug');
    var sequelize = require('sequelize');

    var umzug = new Umzug({

        // storage: 'sequelize',
        model: 'Bar',


        storageOptions: {
            sequelize: sequelize,
        },

        migrations: {
            path: './migrations',
            pattern: /\.js$/
        }

    });

    //  umzug.up().then(function(migrations)  {
    //    console.log('Migration complete!');
   //     });

    umzug.down().then(function(migrations)  {
      console.log('Migration complete!');
    });
Run Code Online (Sandbox Code Playgroud)

当我运行该文件时up function,在该位置出现的错误return migration.addColumn

错误:

Unhandled rejection TypeError: Cannot read property 'addColumn' of undefined

因此,参数迁移似乎是undefined。请帮我。

pio*_*ias 8

您需要定义传递给的构造函数的对象的params属性内部migrations属性Umzug-它定义传递给updown函数的参数。我想配置对象应该如下

{
    storage: 'sequelize',
    storageOptions: {
        sequelize: sequelize // here should be a sequelize instance, not the Sequelize module
    },
    migrations: {
        params: [
            sequelize.getQueryInterface(),
            Sequelize // Sequelize constructor - the required module
        ],
        path: './migrations',
        pattern: /\.js$/
    }
}
Run Code Online (Sandbox Code Playgroud)

通过上面的定义,migration参数现在变成了sequelize.getQueryInterface(),因此简单地说就是queryInterfaceDataTypes参数就是它Sequelize自己。

model属性用于定义Sequelize迁移模型,如果您对默认SequelizeMeta表的创建感到满意,则无需定义该模型。这里是如何Umzug构造的对象应该是什么样子,而这里是怎样的storageOptions可以关注一下。

编辑

在单独的文件中,您需要创建一个Sequelize实例(还用于定义模型等)并将其导出。假设文件树如下

 - db
     - database.js
     - umzug.js
Run Code Online (Sandbox Code Playgroud)

因此,在中,database.js我们创建一个Sequelize实例并将其导出。

 // database.js
 const Sequelize = require('sequelize');

 const db = {
     sequelize: new Sequelize(connectionString, options),
     Sequelize: Sequelize
 };

 module.exports = db;
Run Code Online (Sandbox Code Playgroud)

然后,在Umzug配置文件中

// umzug.js
const db = require('./database');

// here comes the configuration and initialization of Umzug instance with use of db object
// db.sequelize -> sequelize instance
// db.Sequelize -> sequelize constructor (class)
Run Code Online (Sandbox Code Playgroud)