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
}