Примените Sqlite / любые миграции баз данных SQL с помощью Electron [Windows, Mac] - PullRequest
0 голосов
/ 09 сентября 2018

Мой сценарий,

Я работаю над настольным приложением. Где Моя большая задача - хранить данные в реляционной БД (в автономном режиме) и выполнять соответствующую синхронизацию (у компании есть собственный алгоритм синхронизации). Я использую Electron и VueJS в качестве клиентской стороны. Для создания настольного приложения я использую электрон-строитель . Я могу написать миграцию с сырым SQL или различными ORM.

Что я хочу?

Пока я буду устанавливать на рабочий стол, я хочу создать файл базы данных и применить все миграции на клиентском компьютере. Я просто не знаю, как это сделать. Я также изучил документы Electron Builder . Но не поняла. Мне нужен пример, любая идея.

Пожалуйста, помогите мне. Спасибо

1 Ответ

0 голосов
/ 20 мая 2019

После долгих исследований я нашел отличное решение, предоставленное sequalize.js. Я нашел библиотеку Умзуг Гитхуб . Давайте посмотрим на реализацию ...


    /**
     * 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
    };

Идея за сценой
Я четко заявляю о миграции каталога. Кроме того, определите образец соответствия файла. Умзуг просто читает файлы оттуда и запускает миграцию БД. Пример файла миграции следующий ...

// 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');
    }

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...