Как сделать связь между угловой и основной нитью электрона менее утомительной? - PullRequest
0 голосов
/ 06 июня 2019

Я создаю настольное приложение для электронов и angular7, которое сохраняет данные в базе данных sqlit3.Для выполнения операций CRUD в угловом приложении мне нужно было установить связь между электронным рендером и основным процессом.Хотя это работает, проблема заключается в том, что мне приходилось добавлять новые прослушиватели событий для каждой операции с базой данных, которую я хотел выполнить.

Это сводится к тому, чтобы накачать файл main.ts, где я создаю окно браузера.,Просто очень неправильно писать, в основном, писать один и тот же код снова и снова, более или менее изменяя только имя события.Я следовал за некоторыми уроками для этого, так как я довольно новичок в электронном, а также в угловом, в частности, в этом уроке (также я не использовал Electron-Forge):

Как создать приложение Electronиспользуя Angular и SQLite3

... и в итоге следовали этому совету, чтобы заставить узлы работать с модулем sqlite3:

Как использовать модуль sqlite3 с электроном?

После реализации базовых функций функция createWindow в моем файле main.ts выглядит следующим образом:

const createWindow = async () => {

  const connection = await createConnection({
    type: 'sqlite',
    synchronize: true,
    logging: true,
    logger: 'simple-console',
    database: './data/database.db',
    entities: [Item],
  });

  const itemRepo = connection.getRepository(Item);

  win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });

  win.loadURL(url.format({
      pathname: path.join(__dirname, `/../../dist/angular-electron-sqlite/index.html`),
      protocol: 'file:',
      slashes: true
    })
  );

  win.webContents.openDevTools();

  win.on('closed', () => {
    win = null;
  });

  ipcMain.on('get-items', async (event: any, ...args: any[]) => {
    try {
      event.returnValue = await itemRepo.find();
    } catch (err) {
      throw err;
    }
  });

  ipcMain.on('add-item', async (event: any, _item: Item) => {
    try {
      const item = await itemRepo.create(_item);
      await itemRepo.save(item);
      event.returnValue = await itemRepo.find();
    } catch (err) {
      throw err;
    }
  });

  ipcMain.on('delete-item', async (event: any, _item: Item) => {
    try {
      const item = await itemRepo.create(_item);
      await itemRepo.remove(item);
      event.returnValue = await itemRepo.find();
    } catch (err) {
      throw err;
    }
  });
};

Это выглядит не так уж плохо, но я также добавил операции только для одногостол пока что.Если я правильно понял концепцию, я понимаю, что мне нужно добавлять новых слушателей для каждой новой таблицы, которую я хочу использовать в своем приложении.Я ищу способ добавления слушателей событий более динамичным способом или другой и лучшей стратегии для подключения базы данных SQLite3.По крайней мере, способ переместить целые слушатели регистрации событий в разные файлы.

...