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();
});