我一直在搜索Electron文档,试图找出如何在Electron应用中保存数据。例如,在iOS或OS X中,您可以使用NSUserDefaults来存储用户设置和首选项。我想做类似的事情。如何在Electron应用程序中保留数据?
答案 0 :(得分:29)
NeDB是Electron by Electron的唯一建议或特色工具,作为嵌入式持久数据库。 - http://electron.atom.io/community/
如果设置很复杂,那么存储用户设置也很有用。
Node.js,nw.js,Electron的嵌入式持久性或内存数据库 和浏览器,100%JavaScript,没有二进制依赖。 API是一个子集 MongoDB的速度很快。 - NeDB
创建或加载数据库:
var Datastore = require('nedb')
, db = new Datastore({ filename: 'path/to/datafile', autoload: true });
// You can issue commands right away
插入文档:
var doc = { hello: 'world'
, n: 5
, today: new Date()
, nedbIsAwesome: true
, notthere: null
, notToBeSaved: undefined // Will not be saved
, fruits: [ 'apple', 'orange', 'pear' ]
, infos: { name: 'nedb' }
};
db.insert(doc, function (err, newDoc) { // Callback is optional
// newDoc is the newly inserted document, including its _id
// newDoc has no key called notToBeSaved since its value was undefined
});
查找文档:
// Finding all inhabited planets in the solar system
db.find({ system: 'solar', inhabited: true }, function (err, docs) {
// docs is an array containing document Earth only
});
列表继续......
答案 1 :(得分:17)
我编写了一个名为electron-json-storage的NPM模块,旨在将其抽象出来并为开发人员提供一个简单易用的界面。
模块内部从/ app.getPath('userData')
读取/写入JSON:
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"
});
});
答案 2 :(得分:7)
电子视图使用Webkit构建,可让您访问基于Web的本地存储API。适合简单易用的设置存储。
如果您需要更强大的功能或需要从主脚本进行存储访问,您可以使用众多基于节点的存储模块之一。我个人喜欢lowdb。
对于大多数节点存储模块,您需要提供文件位置。试试:
var app = require('app');
app.getPath('userData');
答案 3 :(得分:7)
有一个很好的模块用于在elecron中存储用户数据。它被称为electron-store。
安装
$ npm install electron-store
示例用法(从github页面复制)
const Store = require('electron-store');
const store = new Store();
store.set('unicorn', '');
console.log(store.get('unicorn'));
//=> ''
// Use dot-notation to access nested properties
store.set('foo.bar', true);
console.log(store.get('foo'));
//=> {bar: true}
store.delete('unicorn');
console.log(store.get('unicorn'));
//=> undefined
这个模块有很多功能,有很多advantages over window.localStorage
答案 4 :(得分:5)
有一个模块提供了简单的方法来获取和设置json文件到这个目录,如果需要创建子目录并支持回调和承诺:
https://github.com/ran-y/electron-storage
自述:
安装
$ npm install --save electron-storage
使用
const storage = require('electron-storage');
API
storage.get(filePath,cb)
storage.get(filePath, (err, data) => {
if (err) {
console.error(err)
} else {
console.log(data);
}
});
storage.get(文件路径)
storage.get(filePath)
.then(data => {
console.log(data);
})
.catch(err => {
console.error(err);
});
storage.set(filePath,data,cb)
storage.set(filePath, data, (err) => {
if (err) {
console.error(err)
}
});
storage.set(filePath,data)
storage.set(filePath, data)
.then(data => {
console.log(data);
})
.catch(err => {
console.error(err);
});
storage.isPathExists(path,cb)
storage.isPathExists(path, (itDoes) => {
if (itDoes) {
console.log('pathDoesExists !')
}
});
storage.isPathExists(路径)
storage.isPathExists(path)
.then(itDoes => {
if (itDoes) {
console.log('pathDoesExists !')
}
});
答案 5 :(得分:4)
由于NeDB的最新版本是4年前,并且存在许多未解决的问题,所以我不建议这样做。但是,您现在可以使用许多其他选择。
https://github.com/pubkey/rxdb(许多功能,可观察到的查询)
https://github.com/pouchdb/pouchdb(简单但有许多未解决的问题)
https://github.com/techfort/LokiJS(仅限内存存储)
https://github.com/typicode/lowdb(适用于简单的小型数据集)
答案 6 :(得分:2)
您可以使用Indexeddb,由于以下原因,它最有可能满足客户端应用程序的需求:
总而言之,这是一个不错的选择。唯一的警告是,如果未设置navigator.storage.persist
,或者在主机崩溃时,索引内核处于损坏状态,那么当存储处于紧张状态时,铬核可能会自动清除indexeddb以回收磁盘空间。
答案 7 :(得分:1)
除了其他答案中提到的以外,您还有其他选择。
如果要将数据存储在SQL数据库中,则可以https://github.com/mapbox/node-sqlite3
或者,如果要存储配置,则可以直接存储在操作系统的userData
存储中。
const electron = require('electron');
const fs = require('fs');
const path = require('path');
const dataPath = electron.app.getPath('userData');
const filePath = path.join(dataPath, 'config.json');
function writeData(key, value){
let contents = parseData()
contents[key] = value;
fs.writeFileSync(filePath, JSON.stringify(contents));
}
function readData(key, value) {
let contents = parseData()
return contents[key]
}
function parseData(){
const defaultData = {}
try {
return JSON.parse(fs.readFileSync(filePath));
} catch(error) {
return defaultData;
}
}
答案 8 :(得分:0)
有许多方法可以在Electron中使用数据持久性,选择正确的方法主要取决于您的用例。如果它只是关于保存应用程序设置,那么您可以使用简单的机制,如平面文件或HTML5存储API,对于高级数据要求,您应该选择大型数据库解决方案,如MySQL或MongoDB(有或没有ORM)。
的方法/工具列表