我正在使用sequelize js,并开发了一个node js application,它被部署到生产中并拥有live。
在开发模式下,如果我需要alter alter DB,我过去使用过DB,它运行得很好。
但是现在,在开发完成后,,我想修改一个表,并向它添加一个列.
我搜索了许多帖子,但是,没有得到一个关于如何运行这些迁移的确切示例。
我尝试使用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')
]
}
};这是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!');
});当我运行该文件时,在return migration.addColumn位置的up function中有一个错误
错误:
Unhandled rejection TypeError: Cannot read property 'addColumn' of undefined
因此,参数迁移似乎是undefined。请帮帮我。
发布于 2017-03-15 14:08:39
您需要在传递给params构造函数的对象的migrations属性中定义Umzug属性--它定义传递给up和down函数的参数。我认为配置对象应该如下所示
{
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实例(进一步用于定义模型等)。然后出口。让我们假设文件树如下
- db
- database.js
- umzug.js因此,在database.js中,我们创建一个Sequelize实例并导出它。
// database.js
const Sequelize = require('sequelize');
const db = {
sequelize: new Sequelize(connectionString, options),
Sequelize: Sequelize
};
module.exports = db;然后,在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)https://stackoverflow.com/questions/42811710
复制相似问题