在Electron(Atom Shell)应用程序中将用户设置存储在哪里?


80

我似乎找不到用于存储用户设置的内置机制。我希望电子能提供一种在所有台式机平台上存储用户设置的标准方法。如果没有先例可以自己实现,那么我就是不想立即跳转到自定义解决方案。在线研究在该领域非常稀疏。谢谢!


1
我使用localStorage存储了设置,但是我对了解更多有关Electron的工作方式非常感兴趣。由于清除localStorage很麻烦,并且重新安装Electron应用程序似乎无法清除它。
E. Sundin 2015年

Answers:


73

每个平台对于不同种类的数据都有不同的默认位置。因此,如果要基于平台将数据存储在默认位置,请签出app.getPath(name)

它检索与关联的特殊目录或文件的路径name

您还可以使用它来区分用户想要保存的数据和应用程序保存的不想使用户目录混乱的数据。

或者,如果您只想存储指向特定路径的文件,则可以使用 app.setPath(name,path)


正是我要找的东西,我只是不知道该功能的存在!谢谢!
CodeManiak 2015年

42

我在我的Electron应用程序中遇到了这个特殊问题,这篇帖子激发了我编写一个名为electronic-json-storage的NPM模块的信息。

该模块允许轻松地向/从JSON写入/读取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-json-storage很棒,另一个选择是lowdb
JUO

6
只是好奇,但是电子-json-存储与公正var someObj = JSON.parse(fs.readFileSync(path, {encoding: "utf8"}))和公正的优势是什么?fs.writeFileSync(path, JSON.stringify(someObj)});即使使其异步,也不会增加多行。
gman

3
还要看电子设置
k7sleeper

巨大的资源。虽然,看起来该库本身不像示例中那样支持promise。
基思·霍利迪

1
您添加的每个依赖项都需要更大范围的漏洞利用,而另外一部分代码则必须不断更新,如果您是专业开发人员,则还需要审核代码。将整个take肿的库仅替换为两行代码,这无疑是一种不好的做法。
gman

14

Electron不会为此开箱即用。但是,Electron确实为您提供了一种通过app.getPath API以跨平台方式获取存储用户数据的惯用位置的方法。

我想说的三种最常见的实现方法是:

  • localStorage(或任何HTML5存储API)
  • 平面JSON文件(这是我的工作,我为此使用了电子存储
  • 嵌入式数据库,例如IndexedDB,neDB或sqlite

您选择哪一种取决于您应用程序的需求。如果您只需要在渲染器过程中访问此数据,那么我将使用localStorage。在大多数情况下,似乎您需要同时访问main和renderer中的数据,因此JSON文件很有意义。如果您要处理大量数据或复杂的查询,那么数据库也许是有意义的。我在这里详细介绍了这一点


5

本地存储怎么样?如果您需要通过浏览器进程访问这些设置,则可能需要编写自己的(或仅使用实现此功能的node.js库)


1

我发现最好的方法是将其存储在一个简单的JSON文件中。问题是,如果将JSON存储在应用程序目录中,则在更新应用程序时,它将被清除。因此,您要将其放在当前操作系统的用户设置的默认目录中。幸运!!!!! 有一个供节点开发人员使用的库,可以帮助您找到userdata目录。该模块称为appdirectory,我已经使用了几次。它非常易于使用。

请参阅此处的目录


1
或者只是getPath(userData)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.