Electron中如何做持久化存储

Electron做持久化存储有以下3种方式

LocalStroage

LocalStroage属于浏览器存储方式通过键值对的形式存储,最大存储空间为5MB

获取

localStorage.getItem("myCat");

设置

localStorage.setItem("myCat", "Tom");

移除项

localStorage.removeItem("myCat");

清空

localStorage.clear();

IndexedDB数据库存储1

IndexedDB 是一种在用户浏览器内持久化存储数据的方法。它可以让你创建具有丰富查询能力的 Web 应用,而无需考虑网络可用性,因此你的应用在在线和离线时都可以正常运行。

使用例子

const customerData = [
  { ssn: "444-44-4444", name: "Bill", age: 35, email: "bill@company.com" },
  { ssn: "555-55-5555", name: "Donna", age: 32, email: "donna@home.org" },
];
const dbName = "the_name";

const request = indexedDB.open(dbName, 2);

request.onerror = (event) => {
  // 错误处理
};
request.onupgradeneeded = (event) => {
  const db = event.target.result;

  // 创建一个对象存储来存储我们客户的相关信息,我们将“ssn”作为键路径
  // 因为 ssn 可以保证是不重复的——或至少在启动项目的会议上我们是这样被告知的。
  const objectStore = db.createObjectStore("customers", { keyPath: "ssn" });

  // 创建一个索引以通过姓名来搜索客户。名字可能会重复,所以我们不能使用 unique 索引。
  objectStore.createIndex("name", "name", { unique: false });

  // 使用邮箱建立索引,我们想确保客户的邮箱不会重复,所以我们使用 unique 索引。
  objectStore.createIndex("email", "email", { unique: true });

  // 使用事务的 oncomplete 事件确保在插入数据前对象存储已经创建完毕。
  objectStore.transaction.oncomplete = (event) => {
    // 将数据保存到新创建的对象存储中。
    const customerObjectStore = db
      .transaction("customers", "readwrite")
      .objectStore("customers");
    customerData.forEach((customer) => {
      customerObjectStore.add(customer);
    });
  };
};

使用关系型数据库存储

这里使用sqlite来举例

所需依赖

Knex.js2

Knex.js (发音为 /kəˈnɛks/) 是一个 SQL 查询构建器,适用于 PostgreSQL, CockroachDB, MSSQL, MySQL, MariaDB, SQLite3, Better-SQLite3, Oracle, 和 Amazon Redshift,设计灵活、可移植且使用起来有趣。

它具有传统的 node 风格 回调 以及用于更清晰的异步流控制的 promise 接口、流接口、全功能 查询 和 结构 构建器、事务支持(使用保存点)、连接 池 以及不同查询客户端和方言之间的标准化响应。

better-sqlite3

Node.js 中速度最快、最简单的 SQLite3 库。

  • 全面交易支持
  • 高性能、高效、安全
  • 易于使用的同步 API (比异步 API 具有更好的并发性……是的,你没看错)
  • 支持用户定义的函数、聚合、虚拟表和扩展
  • 64 位整数(在需要之前不可见)
  • 工作线程支持(针对大型/慢速查询)

安装依赖knex、better-sqlite

npm i knex better-sqlite --save

使用例子

const path = require('path')
const knex = require('knex')({
	client: 'better-sqlite3',
	connection: {
		filename: path.join(__dirname, '../db/markdown.sqlite3')
	},
	useNullAsDefault: true
})
// 创建file Table
knex.schema.hasTable('file').then((exists) => {
	if (!exists) {
		return knex.schema.createTable('file', function (t) {
			t.string('id', 50).primary()
			t.string('filePath', 1000)
			t.string('title', 100)
			t.text('body')
			t.dateTime('createAt')
			t.boolean('isEditing')
		})
	}
})
//插入数据
const insertFile = async (file) => {
	try {
		await knex('file').insert(file)
		knex.destroy()
	} catch (error) {
		console.log(error)
		knex.destroy()
	}
}
//更新数据
const editFile = async (file) => {
	const { id, ...updateItem } = file

	try {
		await knex('file').where('id', id).update(updateItem)
		knex.destroy()
	} catch (error) {
		console.log(error)
		knex.destroy()
	}
}
//删除数据
const deleteFile = async (id) => {
	try {
		await knex('file').where('id', id).del()
		knex.destroy()
	} catch (error) {
		console.log(error)
		knex.destroy()
	}
}
//查询数据
const getAllFile = () => {
	return knex.select('*').from('file')
}

module.exports = {
	insertFile,
	editFile,
	deleteFile,
	getAllFile
}


  1. IndexedDB文档 ↩︎

  2. Knex.js中文文档 ↩︎

  3. better-sqlite文档 ↩︎

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路西高辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值