前端存储-indexdb封装:dexie.js的使用

ops/2025/3/18 4:03:16/

前言

indexedDB是一个用于在浏览器中存储较大数据结构的Web API,并且提供了索引功能以实现高性能查找。dexie.js是对indexdb的封装,前端用起来很方便。在此介绍一下项目中用到的操作语句,也方便记录。我的项目是vue3项目。

开始

1、安装

npm install dexie

2、使用

首先新建一个全局文件db.js,用来定义项目中用到的表。注意定义时候表中用到什么字段就定义什么字段,不能多也不能少。之所以用全局文件是便于维护和修改。

我的vue项目目录 根目录/utils/db.js:

import Dexie from 'dexie'const db = new Dexie('YingjingDB');
db.version(1).stores({agents: 'id, agentId, name',chats: 'id, agentId, userId, conversationId, lastMessage,date',
});
export default db

1、增加

批量增加:

在页面里我需要给agents这个表存入数据,操作如下:

<script setup>
import db from '@/utils/db.js';async function getAgentList(){//...异步请求回来agentList数组let agentList = await ...await db.open();await db.agents.bulkPut(agentList);
}
getAgentList();
</script>

db.agents.bulkPut(agentDBList)
bulkPut为往agents的表里批量插入agentList数据。如果在此步骤报错,大部分原因是因为存储时候的字段和db.js里定义的字段不一致!!

增加一条:

await db.agents.add({id:'xxx',agentId: new Date().getTime(),name: '张三'})

2、查询

查询一个键名:

let res = await db.chats.where('agentId').equals('a1').toArray();

或者多个键名联合查询:

let res = await db.chats.where(['agentId','userId']).equals(['a1','u1']).toArray();

3、删除(默认键名为id)

删除一个:删除id为1的这条数据

  await db.chats.delete(1)

批量删除:删除id为1,2的两条数据

let idList=[1,2]
await db.chats.bulkDelete(idList);

批量删除:删除键名为xxx的数据

db.chats.where('conversationId').equals('c1').delete() 

4、更新:更新键名为xxx的这一条的数据,可更改单个字段的数据

db.chats.where('conversationId').equals('c1').modify({lastMessage:'666'})

5、联合使用

如:查找固定键名,排序,并批量删除

await db.chats.where(['agentId','userId']).equals(['a1','u1']).sortBy('date').then(async res=>{console.log(res) // 通过date字段正序排列的数组let idList = []res.forEach(item=>{idList.push(item.id)})await db.chats.bulkDelete(idList); // 通过id批量删除})

后记

这里记录了本项目里常用的一些操作方法。基本能覆盖项目的常用需求。dexie.js很好用,上手快,学习成本低,推荐使用。
参考文章:见识了Dexie.js,我才相信indexedDB不比SQLlite弱


http://www.ppmy.cn/ops/166675.html

相关文章

qt5中使用中文报错error: C2001: 常量中有换行符

1.qt5中使用中文报错error: C2001: 常量中有换行符 如这条代码: this->ui->pbtn_open_card->setText("关闭卡");运行时报错&#xff0c;提示常量中有换行符 2.工具->选项->文本编辑&#xff0c;选择下图 3.重新按utf-8加载编码 4.文件开头添加 #pr…

Redis基础阶段笔记

01 Redis简介 一、Redis 的背景 • 诞生时间&#xff1a;2009 年&#xff0c;由意大利开发者 Salvatore Sanfilippo 为解决网站高并发问题而设计。 • 名字含义&#xff1a;Remote Dictionary Server&#xff08;远程字典服务器&#xff09;&#xff0c;强调其“键值对”存储…

基于Python的PDF转PNG可视化工具开发

基于Python的PDF转PNG可视化工具开发 一、引言 在数字文档处理领域&#xff0c;PDF到图像格式的转换是常见需求。本文介绍如何利用Python的PyMuPDF库和Tkinter框架&#xff0c;开发一个带图形界面的PDF转PNG工具。该工具支持页面选择、分辨率调整等功能&#xff0c;并具有友好…

matlab 三维桥式起重机系统数学模型

1、内容简介 matlab161-三维桥式起重机系统数学模型 可以交流、咨询、答疑 2、内容说明 略 2.3.1 三维桥式起重机系统数学模型 假设&#xff1a;&#xff08;1&#xff09;钢丝绳长度变化忽略不计&#xff0c;且不考虑其柔性&#xff1b;&#xff08;2&#xff09;假设台车和…

C#核心笔记——(五)框架概述

.NET Ftamework中几乎所有功能都是通过大量的托管类型提供的。这些类型组织在层次化的命名空间中&#xff0c;并打包为一套程序集&#xff0c;与CLR一起构成了.NET平台。 有些.NET类型是由CLR直接使用的&#xff0c;且对于托管宿主环境而言是必不可少的。这些类型位于一个名为…

从零开始探索C++游戏开发:性能、控制与无限可能

一、为何选择C开发游戏&#xff1f; 在虚幻引擎5渲染的次世代画面背后&#xff0c;在《巫师3》的庞大开放世界中&#xff0c;在《毁灭战士》的丝滑60帧战斗里&#xff0c;C始终扮演着核心技术角色。这门诞生于1983年的语言&#xff0c;至今仍占据着游戏引擎开发语言使用率榜首…

WireShark自动抓包

背景 异常流量检测是当前保护网络空间安全的重要检测方法。 对流量的研究&#xff0c;首先需要在系统中进行抓包&#xff0c;并对包进行分析。 这里对WireShark自动抓包进行简要介绍。 操作步骤 1、选择“捕获”>“选项”。 2、在Input下&#xff0c;选择要抓包的网络接…

ESP32芯片模组方案,设备物联网无线通信,WiFi蓝牙交互控制应用

在当下&#xff0c;物联网正以前所未有的速度席卷全球&#xff0c;从繁华都市的智能建筑&#xff0c;到宁静乡村的智慧农业&#xff0c;从人们日常使用的可穿戴设备&#xff0c;到工业领域复杂精密的自动化生产线&#xff0c;物联网的触角已深入到生活与生产的每一个角落。 而…