Ash*_*lam 5 javascript database-migration electron electron-builder electron-vue
我的场景,
我正在开发一个基于桌面的应用程序。我最大的挑战是将数据保存到关系数据库(离线)并相应同步(公司有自己的同步算法)。我使用Electron和VueJS作为客户端。为了构建桌面应用程序,我使用electro-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
};
Run Code Online (Sandbox Code Playgroud)
幕后的想法
我明确声明了迁移目录。另外,定义文件匹配模式。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');
}
};
Run Code Online (Sandbox Code Playgroud)