我正在构建一个带有角度前端的电子应用程序,该应用程序监视计算机上的活动窗口以跟踪用户的活动。但是,我在弄清楚如何正确保存此数据方面遇到困难。
我一直在做很多研究,看到有人建议使用IndexedDB / dexie.js,localForage,couchDB,SQLite等。但是,由于我无法理解如何实际实施,因此我正在努力决定使用哪种技术。它们在我的电子应用中-实际电子实现的文档非常稀疏。
我之所以这么努力,是因为可能存在一些创建我不太了解的电子应用程序的关键概念。
我认为,区分main.ts(电子)是后端而我的角度应用是前端是错误的,我应该将其整体考虑。也许有人可以详细说明吗?
这种想法使我无法使用像ouchDB这样的样板样板(放置在index.html-> frontend中):
<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>
这对我来说似乎是一个问题,因为我实际上是从我认为是后端的位置获取活动窗口的数据。
为了更好地理解我的问题,以下是一些代码片段,我认为这些代码片段对于回答这个问题很重要。
首先,我创建了一个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');
}
}
根据我的理解,我应该保留位于我认为是后端的轮询功能中的数据,这与我对上面列出的持久性库的理解不一致。
我希望能够将每个窗口日志存储为一个单独的条目,并对数据进行一些查询和分类。
因此,我希望你们中的任何一个可以阐明我的误解,或者建议一个适合我目的的图书馆。
答案 0 :(得分:1)
Electron文档的一部分稀疏的原因是因为这些机制不是来自Electron的,它们是常规的浏览器技术(例如Chrome,Firefox等)。您应该在MDN(Mozilla开发人员网络)上查询所需的内容:https://developer.mozilla.org。例如,尝试在Google上搜索“ mdn localstorage”,“ mdn indexeddb”,“ mdn cachestorage”或“ mdn cookie”,然后您将开始找到有关本地离线存储内容的文档。
编辑:注意,您不能在Web浏览器中使用CouchDB或SQLite之类的东西,而且这些东西也不是特定于Electron的。您可以搜索“ Node.js CouchDB”或“ Node.js SQLite”以查找这些资源,因为Electron写在Node.js之上。
您可以在Node.js项目中使用的任何东西,都可以在Electron中使用。同样,在Chrome可以使用的浏览器技术中,您可以在Electron中使用,因为Electron将Chrome浏览器引擎与Node.js结合在一起。