【发布时间】:2019-05-02 05:27:20
【问题描述】:
我正在构建一个带有角度前端的电子应用程序,它监视计算机上的活动窗口以跟踪用户的活动。但是,我很难弄清楚如何正确保存这些数据。
我一直在做很多研究,看到人们建议使用 IndexedDB/dexie.js、localForage、couchDB、SQLite 等。但我很难真正决定使用哪种技术,因为我无法理解如何实际实施它们在我的电子应用程序中 - 实际电子实现的文档非常稀疏。
我认为我如此挣扎的原因是,创建电子应用程序时可能存在一些我没有正确理解的关键概念。
我认为我在区分 main.ts(电子)是后端而我的 Angular 应用程序是前端时可能是错误的,我应该将它作为一个整体来考虑。也许有人可以详细说明一下?
这个想法让我无法使用像 couchDB 这样的样板文件看起来像这样的东西(放置在 index.html -> 前端):
<html>
<head>
<!-- Include Dexie -->
<script src="https://unpkg.com/dexie@latest/dist/dexie.js"></script>
<script>
//
// Define your database
//
var db = new Dexie("friend_database");
db.version(1).stores({
friends: 'name,shoeSize'
});
//
// Put some data into it
//
db.friends.put({name: "Nicolas", shoeSize: 8}).then (function(){
//
// Then when data is stored, read from it
//
return db.friends.get('Nicolas');
}).then(function (friend) {
//
// Display the result
//
alert ("Nicolas has shoe size " + friend.shoeSize);
}).catch(function(error) {
//
// Finally don't forget to catch any error
// that could have happened anywhere in the
// code blocks above.
//
alert ("Ooops: " + error);
});
</script>
</head>
</html>
这对我来说似乎是个问题,因为我实际上是从我认为的后端获取活动窗口的数据。
为了更好地理解我的问题,这里有一些我认为对回答这个问题很重要的代码的 sn-ps。
首先,我创建了一个 Poller.ts,顾名思义就是民意调查。我用它来不断地让活动窗口在 PC 上运行。
Poller.ts
import * as EventEmitter from 'events';
export default class Poller extends EventEmitter {
private timeout: number;
constructor(timeout = 5000) {
super();
this.timeout = timeout;
}
public poll(): void {
setTimeout(() => this.emit('poll'), this.timeout);
}
public onPoll(cb): void {
this.on('poll', cb);
}
}
然后,在我的 Main.ts 中,我将此轮询器与 active-win 库结合使用以获取活动窗口。
Main.ts
ipcMain.on('tracking:start', (e) => {
poller.poll();
(async () => {
console.log('Starting tracking');
})();
});
ipcMain.on('tracking:stop', () => {
(async () => {
console.log('Stopping tracking');
})();
});
poller.onPoll(() => {
(async () => {
let activeWindow = await activeWin();
console.log(activeWindow);
})();
poller.poll();
});
轮询过程由 ipcRenderer 发送的事件从前端启动/停止。
角度组件
public startTracking() {
console.log('starting tracking');
if (this.electronService.isElectronApp) {
this.electronService.ipcRenderer.send('tracking:start');
}
}
public stopTracking() {
console.log('stopping tracking');
if (this.electronService.isElectronApp) {
this.electronService.ipcRenderer.send('tracking:stop');
}
}
因此,根据我的理解,我应该从位于我认为的后端的轮询函数中持久化数据,这与我对上面列出的持久性库的理解不一致。
我希望能够将每个窗口日志存储为单独的条目,并对数据进行一些查询和分类。
所以我希望你们中的任何人都可以阐明我的误解,或者建议一个适合我目的的库。
【问题讨论】:
标签: angular database electron persistence