electron中使用lowdb指定存储位置进行数据本地持久化存储

lowdb使用方法

const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync'); // 同步模块
const Memory = require('lowdb/adapters/Memory'); // 存入内存
const path = require('path');
const fs = require('fs-extra'); 
const os = require('os');
const { remote, app } = require('electron');

// 渲染进程和主进程兼容
const APP = process.type === 'renderer' ? remote.app : app; 

// 本地路径一项目目录
// const adapter = new FileSync('datastore.json')
// const STORE_PATH = APP.getAppPath('userData') // 获取electron应用的用户目录
// if (process.type !== 'renderer') {
  // if (!fs.pathExistsSync(STORE_PATH)) {
    // fs.mkdirpSync(STORE_PATH);
  // }
// }

// 本地路径二项目目录
// const adapter = new FileSync(path.join(__dirname, '/datastore.json')) // 初始化lowdb读写的json文件名以及存储路径

// 本地路径三,系统目录
const adapter = new FileSync(path.join(os.homedir(), 'datastore.json')); // 存储在本地目录

let db = low(adapter)

db.defaults({ info: {}, isActivated: false }).write();
db.set('info', {name: 'guo', desc: '前端工程师'}).write()
let appInfo = db.get('info').value();
console.log('db', appInfo);

module.exports = db; //模块导出,可在其它js文件中引用

如果主进程和渲染进程的数据不同步,因为在没有额外处理的情况下,main进程和renderer进程不是一个db的两份引用,而是一个db的两份拷贝,两个进程操作的是不同的db

可以这样写:

db.read().get('xxx').value()
db.read().set('xxx', 'xxx')

强制在每个db操作前,都通过read()刷新一遍内存区,这样就能保证拿到的数据都是最新的啦。

也可以通过electron进程间通信的方法,渲染进程在设置了新数据后通知主进程再进行一次设置


// renderer进程
db.set('info', data).write();
ipcMain.send('info', 'xxx');

// main主进程
ipcMain.on('info', (event, arg) => {
  console.log('主进程',arg);
  db.set('info', 'xxx').write();
});

你可能感兴趣的:(electron)