Я создаю настольное приложение для электронов и 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.По крайней мере, способ переместить целые слушатели регистрации событий в разные файлы.