首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后缀umzug迁移

后缀umzug迁移
EN

Stack Overflow用户
提问于 2017-03-15 13:49:41
回答 1查看 9.2K关注 0票数 3

我正在使用sequelize js,并开发了一个node js application,它被部署到生产中并拥有live。

在开发模式下,如果我需要alter alter DB,我过去使用过DB,它运行得很好。

但是现在,在开发完成后,,我想修改一个表,并向它添加一个列.

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

我尝试使用Umzug并运行迁移,但是它给我带来了错误。

这是我试过的代码,

migrations/barmigration.js:

代码语言:javascript
复制
  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')
        ]
    }

};

这是umzug configuration**:**

代码语言:javascript
复制
 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!');
    });

当我运行该文件时,在return migration.addColumn位置的up function中有一个错误

错误:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-15 14:08:39

您需要在传递给params构造函数的对象的migrations属性中定义Umzug属性--它定义传递给updown函数的参数。我认为配置对象应该如下所示

代码语言:javascript
复制
{
    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$/
    }
}

根据上面的定义,migration参数现在将变成sequelize.getQueryInterface(),所以简单地说是queryInterface,而DataTypes参数就是Sequelize本身。

model属性用于定义续集迁移模型,如果您对默认的SequelizeMeta表创建感到满意,则不需要定义它。这里Umzug构造函数对象的样子,这里storageOptions的样子。

编辑

在单独的文件中,需要创建一个Sequelize实例(进一步用于定义模型等)。然后出口。让我们假设文件树如下

代码语言:javascript
复制
 - db
     - database.js
     - umzug.js

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

代码语言:javascript
复制
 // database.js
 const Sequelize = require('sequelize');

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

 module.exports = db;

然后,在Umzug配置文件中

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

https://stackoverflow.com/questions/42811710

复制
相关文章

相似问题

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