使用 Electron [Windows, Mac] 应用 Sqlite/Any SQL 数据库迁移

Apply Sqlite/Any SQL Database Migrations with Electron [Windows, Mac]

我的场景,

我正在开发基于桌面的应用程序。我最大的挑战是将数据保存到关系数据库中(离线)并相应地同步(公司有自己的同步算法)。我使用 ElectronVueJS 作为客户端。为了构建桌面应用程序,我使用 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');
    }

};