我似乎找不到存储用户设置的内置机制。我希望 Electron 提供了一种跨所有桌面平台存储用户设置的标准方法。如果没有先例,我可以自己实现它,我只是不想立即跳到自定义解决方案。这方面的在线研究非常稀少。谢谢!
6 回答
每个平台对不同类型的数据都有不同的默认位置。因此,如果您想根据平台将数据存储在默认位置,请查看app.getPath(name)
它检索与关联的特殊目录或文件的路径name
。
您还可以使用它来区分用户想要保存的数据,以及您的应用程序保存的您不想弄乱用户目录的数据。
或者,如果您只想存储与特定路径相关的文件,您可以使用
app.setPath(name,path)
我的 Electron 应用程序遇到了这个特殊问题,这篇文章启发我编写了一个名为electron-json-storage的 NPM 模块。
该模块允许轻松地将 JSON 写入/读取到/从app.getPath('userData')
:
const storage = require('electron-json-storage');
// Write
storage.set('foobar', { foo: 'bar' }).then(function() {
// Read
storage.get('foobar').then(function(object) {
console.log(object.foo);
// will print "bar"
});
});
Electron 并没有为此提供任何开箱即用的东西。但是,Electron 确实为您提供了一种通过app.getPath API以跨平台方式获取存储用户数据的惯用位置的方法。
我想说最常见的 3 种方法是:
- localStorage(或任何 HTML5 存储 API)
- 平面 JSON 文件(这就是我所做的,我使用电子商店)
- 嵌入式数据库,如 IndexedDB、neDB 或 sqlite
您选择哪一个将取决于您的应用程序的需求。如果您只需要在渲染器进程中访问这些数据,那么我只需使用localStorage
. 大多数情况下,您似乎需要同时访问主渲染器和渲染器中的数据,因此 JSON 文件是有意义的。如果您正在处理大量数据或复杂的查询,那么数据库可能是有意义的。我在这里更详细地写了这个。
本地存储怎么样?如果您需要从浏览器进程访问这些设置,您可能需要编写自己的(或仅使用实现此功能的 node.js 库)
我发现最好的方法是将它存储在一个简单的文件中作为 JSON。问题是,如果您将该 JSON 存储在应用程序目录中,那么当您更新应用程序时,它将被清除。因此,您希望将其放在当前操作系统的用户设置的默认目录中。幸运!!!!有一个供节点开发人员使用的库,可以帮助您找到 userdata 目录。该模块被称为appdirectory
,我已经使用过几次了。它非常易于使用。
在此处查看应用程序目录
可以将数据存储在 cookie 中;Electron 有一个机制(https://electronjs.org/docs/api/cookies)并且可以在浏览器中检索 cookie(Angular:https : //docs.angularjs.org/api/ngCookies/service/$饼干,反应/其他:https ://github.com/reactivestack/cookies )
我能够让它与 Angularjs 一起工作。