首页 > 其他分享 >基于electron-store的最佳实践封装工具类

基于electron-store的最佳实践封装工具类

时间:2024-04-29 21:00:11浏览次数:22  
标签:return defaultValue value electron key 封装 store

基于之前讨论的electron-store最佳实践,以下是一个更加完善和健壮的封装示例,包含了类型处理、默认值设定、以及一些实用方法,以适应更复杂的场景:

// storeUtil.js
const Store = require('electron-store');
const app = require('electron').app;

class StoreUtil {
  constructor(configName = 'appSettings', defaults = {}, encryptionKey = null) {
    this.store = new Store({ 
      name: configName,
      encryptionKey, // 可选,提供一个密钥用于加密存储
      defaults
    });

    // 初始化默认值,确保所有默认设置已写入存储
    for (const key in defaults) {
      if (!this.store.has(key)) {
        this.set(key, defaults[key]);
      }
    }
  }

  // 设置值,支持自动处理特殊类型如Date
  set(key, value) {
    if (value instanceof Date) {
      value = value.toISOString();
    }
    return this.store.set(key, value);
  }

  // 获取值,支持类型转换和默认值
  get(key, defaultValue = null) {
    const rawValue = this.store.get(key);
    if (rawValue === undefined && defaultValue !== null) {
      return defaultValue;
    }

    try {
      if (typeof defaultValue === 'string' && defaultValue.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z$/)) {
        return new Date(rawValue);
      }
    } catch (error) {
      console.error(`Error converting value for key ${key}:`, error);
    }

    return rawValue;
  }

  // 删除键值对
  delete(key) {
    return this.store.delete(key);
  }

  // 清空所有存储
  clear() {
    return this.store.clear();
  }

  // 检查是否存在某个键
  has(key) {
    return this.store.has(key);
  }
}

module.exports = StoreUtil;

这个封装类不仅提供了基础的读写操作,还额外处理了日期类型的序列化与反序列化,以及检查和设置默认值的功能。
此外,它还允许传入一个加密密钥(encryptionKey),以便在需要时对存储的内容进行加密处理(这要求使用支持加密的electron-store版本或其他加密插件)。
通过这样的封装,你的应用程序可以更加灵活和安全地管理持久化数据。

标签:return,defaultValue,value,electron,key,封装,store
From: https://www.cnblogs.com/longmo666/p/18166645

相关文章

  • IPC-7711/21D, IPC-7711D, IPC-7721D 电子组件的返工、修改和维修,验收标准。Rework,
    IPC-7711/21-RevisionD-StandardOnly:Rework,ModificationandRepairofElectronicAssembliesTheIPC-7711/21guideprovidesproceduresforrework,repairandmodificationofprintedboardassemblies,includingtoolsandmaterials,commonprocedures,......
  • Cookie Store API
    CookieStoreAPI获取和设置cookie的信息无法获取HttpOnly标记的cookieexpires为null时,表示会话结束时过期domain只有在domain为当前域名的主域名时才显示(不包含子域名),否则为null.<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/>......
  • 封装
    packagefengzhuang;//一个项目应该只存在一个main方法publicclassApplication{publicstaticvoidmain(String[]args){Students1=newStudent();s1.setName("小王");System.out.println(s1.getName());s1.setAge(-1);System.out.println(s1.getAge());}}pack......
  • dremio 25.0 KVStore 升级简单说明
    dremio25.0开始对于数据源的存储支持加密了,所以升级上稍有不同,官方给出的操作流程如下参考处理//对于已经运行的,应该先stop,然后进行应用包的替换dremiostop//执行dremio-admin的upgradedremio-adminupgrade//启动dremiostart//停止drem......
  • 第四章:Total Store Order and the x86 Memory Model
    chapter4:TSO于X86内存模型1、为什么需要TSO/x86处理器内核长期以来使用writebuffer来保存已提交的store指令,直到内存系统可以处理这些store请求。当store指令提交时,store请求进入writebuffer,而当需要写入的缓存行在内存系统中可以保证缓存一致性时,store请求就退出writebuffer......
  • 封装两个简单的Jquery组件
    Jquery给我们提供了很大的方便,我们把他看成是一个公共库,以致在这个公共库上延伸出了很多Jquery插件;在项目过程中,有些插件总是不那么令人满意;主要说两个项目用途:1、 遮罩层,跟一般的遮罩层不一样,我需要实现的是对某一个元素进行局部遮罩;2、 冒泡提示,网上有很多,我需要的只是一......
  • 闪回还原点(Restore Point)
    还原点概念Restorepoint 有两种类型: Normal 和 Guaranteed。1)Normalrestorepoint创建语法:createrestorepointrp_name;相当于某个时间点或者 SCN 的一个别名。 restorepoint 的名字和对应的 SCN 会保存在控制文件中。创建了 normalrestorepoint 后,如果需......
  • qt封装dll并静态调用其它接口
    开发套件为QT5.9+MinGW编译器首先创建dll,第一步创建一个打开pro文件,因为我们创建的是app,需要的是dll,修改app->lib,注意不是dll其次,静态调用自己的底层库在工程中加入头文件,在pro添加dll的路径(注意这里静态调用没有用到lib文件)添加示例接口将编译的dll放入测试环境......
  • Electron打包的时候路径出现问题!include: could not find: "C:\Users\xxxx\AppDat
    !include:couldnotopenfile:"C:\ztg\projects\electron-vite-vue-ts\node_modules\.pnpm\[email protected][email protected][email protected]_dmg-bui_lrspnoputfiosacwyigcypdbdi\node_modules\app-builder-lib\t......
  • 如何使用 SFDX CLI 拉取存储在 Public 文件夹的邮件模版(How to retrieve an email tem
    SELECTDeveloperName,FolderName,IsActiveFROMEmailTemplateSELECTDeveloperName,Folder.DeveloperName,IsActiveFROMEmailTemplate使用下面的命令可以正确获取到public文件夹下的邮件模版sfdxforce:source:retrieve-mEmailTemplate:unfiled\$public\/My_te......