使用 Electron [Windows, Mac] 应用 Sqlite/Any SQL 数据库迁移
Apply Sqlite/Any SQL Database Migrations with Electron [Windows, Mac]
我的场景,
我正在开发基于桌面的应用程序。我最大的挑战是将数据保存到关系数据库中(离线)并相应地同步(公司有自己的同步算法)。我使用 Electron 和 VueJS 作为客户端。为了构建桌面应用程序,我使用 electron-builder。我能够使用原始 SQL 或各种 ORM 编写迁移。
我想要什么?
虽然我将安装到桌面,但我想创建数据库文件并在客户端计算机上应用所有迁移。我只是不知道那部分该怎么做。我还调查了 Electron Builder Docs。但是没听懂。我需要一个例子,任何想法。
请帮助我。谢谢
经过大量研究后,我发现 sequalize.js 提供了一个很棒的解决方案。我找到了一个图书馆 Umzug Github。让我们看看实现...
/**
* Created by Ashraful Islam
*/
const path = require('path');
const Umzug = require('umzug');
const database = /* Imported my database config here */;
const umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: database
},
// see: https://github.com/sequelize/umzug/issues/17
migrations: {
params: [
database.getQueryInterface(), // queryInterface
database.constructor, // DataTypes
function () {
throw new Error('Migration tried to use old style "done" callback. Please upgrade to "umzug" and return a promise instead.');
}
],
path: './migrations',
pattern: /\.js$/
},
logging: function () {
console.log.apply(null, arguments);
}
});
function logUmzugEvent(eventName) {
return function (name, migration) {
console.log(`${name} ${eventName}`);
}
}
function runMigrations() {
return umzug.up();
}
umzug.on('migrating', logUmzugEvent('migrating'));
umzug.on('migrated', logUmzugEvent('migrated'));
umzug.on('reverting', logUmzugEvent('reverting'));
umzug.on('reverted', logUmzugEvent('reverted'));
module.exports = {
migrate: runMigrations
};
幕后创意
我明确声明了迁移目录。另外,定义文件匹配模式。 Umzug 只是从那里读取文件和 运行 数据库迁移。下面是一个示例迁移文件...
// 000_Initial.js
"use strict";
module.exports = {
up: function(migration, DataTypes) {
return migration.createTable('Sessions', {
sid: {
type: DataTypes.STRING,
allowNull: false
},
data: {
type: DataTypes.STRING,
allowNull: false
},
createdAt: {
type: DataTypes.DATE
},
updatedAt: {
type: DataTypes.DATE
}
}).then(function() {
return migration.addIndex('Sessions', ['sid']);
});
},
down: function(migration, DataTypes) {
return migration.dropTable('Sessions');
}
};
我的场景,
我正在开发基于桌面的应用程序。我最大的挑战是将数据保存到关系数据库中(离线)并相应地同步(公司有自己的同步算法)。我使用 Electron 和 VueJS 作为客户端。为了构建桌面应用程序,我使用 electron-builder。我能够使用原始 SQL 或各种 ORM 编写迁移。
我想要什么?
虽然我将安装到桌面,但我想创建数据库文件并在客户端计算机上应用所有迁移。我只是不知道那部分该怎么做。我还调查了 Electron Builder Docs。但是没听懂。我需要一个例子,任何想法。
请帮助我。谢谢
经过大量研究后,我发现 sequalize.js 提供了一个很棒的解决方案。我找到了一个图书馆 Umzug Github。让我们看看实现...
/**
* Created by Ashraful Islam
*/
const path = require('path');
const Umzug = require('umzug');
const database = /* Imported my database config here */;
const umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: database
},
// see: https://github.com/sequelize/umzug/issues/17
migrations: {
params: [
database.getQueryInterface(), // queryInterface
database.constructor, // DataTypes
function () {
throw new Error('Migration tried to use old style "done" callback. Please upgrade to "umzug" and return a promise instead.');
}
],
path: './migrations',
pattern: /\.js$/
},
logging: function () {
console.log.apply(null, arguments);
}
});
function logUmzugEvent(eventName) {
return function (name, migration) {
console.log(`${name} ${eventName}`);
}
}
function runMigrations() {
return umzug.up();
}
umzug.on('migrating', logUmzugEvent('migrating'));
umzug.on('migrated', logUmzugEvent('migrated'));
umzug.on('reverting', logUmzugEvent('reverting'));
umzug.on('reverted', logUmzugEvent('reverted'));
module.exports = {
migrate: runMigrations
};
幕后创意
我明确声明了迁移目录。另外,定义文件匹配模式。 Umzug 只是从那里读取文件和 运行 数据库迁移。下面是一个示例迁移文件...
// 000_Initial.js
"use strict";
module.exports = {
up: function(migration, DataTypes) {
return migration.createTable('Sessions', {
sid: {
type: DataTypes.STRING,
allowNull: false
},
data: {
type: DataTypes.STRING,
allowNull: false
},
createdAt: {
type: DataTypes.DATE
},
updatedAt: {
type: DataTypes.DATE
}
}).then(function() {
return migration.addIndex('Sessions', ['sid']);
});
},
down: function(migration, DataTypes) {
return migration.dropTable('Sessions');
}
};