Sra*_*van 1 node.js sequelize.js umzug
我正在使用sequelize js和开发一个node js application,将其部署到生产环境并具有实时数据库。
而在发展模式下,如果我需要alter的DB,我以前用做它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。请帮我。
您需要定义传递给的构造函数的对象的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$/
}
}
Run Code Online (Sandbox Code Playgroud)
通过上面的定义,migration参数现在变成了sequelize.getQueryInterface(),因此简单地说就是queryInterface,DataTypes参数就是它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)
| 归档时间: |
|
| 查看次数: |
2985 次 |
| 最近记录: |