在电子(原子外壳)应用程序中存储用户设置的位置?

我似乎找不到存储用户设置的内置机制。我希望电子能够提供一种标准的方法来存储所有桌面平台上的用户设置。如果没有这方面的先例,我可以自己实现它,我只是不想立即跳转到自定义解决方案。在线研究在这个领域相当稀少。谢谢!

65666 次浏览

How about LocalStorage? If you need to access these settings from the browser process, you probably need to write your own (or just use a node.js library that implements this)

Each platform has different default locations for different kinds of data. So, if you want to store data in default locations based on platform, check out app.getPath(name)

It retrieves a path to a special directory or file associated with name.

You can also use it to differentiate between data the user wants to save, and data your application saves that you don't want to clutter up users directories.

Or if you just want to store files reletive to a specific path you can use the app.setPath(name,path)

The best way that I have found is to store it in a simple file as JSON. The problem is that if you store that JSON in the app dir, then when you update the app, it will get wiped out. So you want to put it in the default directory for user settings for the current operating system. LUCKILY!!!!! There is a library for node developers that will help you find the userdata directory. The module is called appdirectory, and I have used it several times. It is extremely easy to use.

See APPDIRECTORY HERE

I've faced this particular problem with my Electron app and this post inspired me to write an NPM module called electron-json-storage.

This module allows to easily write/read JSON to/from 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 doesn't give you anything out of the box for this. However, Electron does give you a method for getting the idiomatic location of storing user data in a cross platform way via the app.getPath API.

I'd say the 3 most common ways to do this are:

  • localStorage (or any HTML5 storage API)
  • flat JSON file (this is what I do, and I use electron-store for it)
  • embedded database like IndexedDB, neDB, or sqlite

Which one you choose will depend on your app's needs. If you only need to access this data in the renderer process, then I'd just use localStorage. Most of the time it seems you need to access the data in both the main and renderer, so a JSON file makes sense. If you're dealing with lots of data or complex querying, then maybe a database makes sense. I wrote about this more in detail here.

One could store data in cookies; Electron has a mechanism for it (https://electronjs.org/docs/api/cookies) and the cookies can be retrieved in the browser (Angular: https://docs.angularjs.org/api/ngCookies/service/$cookies, React/Other: https://github.com/reactivestack/cookies)

I was able to get it working with Angularjs.