XFE 技术 生活 笔记 文集

Electron 数据存储方案一记

🔖 技术 👀 10 🕒 2019-03-12 👨‍🎓 XFE/Peter

由于桌面开发对于本地存储的需求是必要的,故而花费了一点时间来研究怎么在Electron环境下简单、快速方便的进行数据持久

简介

Electron 基于 nodeJS + Chromiun 故而有 基于 levelDB封装的 indexedDB。而今天的主角 level-js 包 在 Electron 环境下用类 levelDB API 对indexDB的一种封装。

使用level-js包,我们能够直接存储除 undefinednull 外的其他JS 对象。这比直接使用 WEBStorage API更加的方便。不过,其还是提供了诸多接口与配置。

level-js

文档(自整理)4.0.0

由于官方文档讲的非常的简洁,故而从源码中及 level 家族其他库中寻找并总结接口文档如下

Level

  • 构造函数
  • 参数 location: 数据库标志,相当于数据库名
  • 参数 opts.prefix : 数据库标志前缀,当传入location 参数之后再创建 indexedDB 实例时会将 locationopts.prefix 参数拼合到一起作为数据库名字。默认值: level-js-
  • 参数 opts.version : 数据库版本号,

简单封装

根据自己使用最多的put、get、del方法进行封装,使其使用更简单方便。

const leveljs = require('level-js')
const db = leveljs('testElectron')
db.open({},function(err,value){
console.error(err);
console.log(value);

})
module.exports = {
vm:db,
get(key){
return new Promise((resolve,reject) => {
try {
db.get(key,{asBuffer:false},(err,value)=>{
if(!err){
resolve(value)
}else{
if(err.message == 'NotFound'){
resolve(undefined);
}else{
reject(err);
}
}
})
} catch (error) {
reject(error)
}
})
},
put(key,value){
return new Promise((resolve,reject) => {
try {
db.put(key,value,{},(err,value)=>{
if(!err){
resolve(value)
}else{
reject(err);
}
})
} catch (error) {
reject(error)
}
})
},
del(key,value){
return new Promise((resolve,reject) => {
try {
db.del(key,{},(err,value)=>{
if(!err){
resolve(value)
}else{
reject(err);
}
})
} catch (error) {
reject(error)
}
})
},
}