当前位置: 首页 > news >正文

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

前言

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弱

相关文章:

  • 从 YOLOv1 到 YOLOv2:目标检测的进化之路
  • 深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)
  • 【RISCV LAB】0x01-安装实验仿真辅助工具
  • iOS OC使用正则表达式去除特殊符号并加粗文本,适用于接入AI大模型的流模式数据的文字处理
  • 深度学习 Deep Learning 第1章 深度学习简介
  • ByteByteGo学习笔记:通知系统设计
  • Redis分布式锁深度剖析:从原理到Redisson实战,破解脑裂与高并发锁难题
  • jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.
  • 如何更新 Oh My Zsh
  • k8s中的控制器的使用
  • NetLink内核套接字案例分析
  • 黄金还能再涨吗?
  • 虚拟健身教练小程序:AI动作识别与个性化训练计划生成
  • 3.14周报
  • 联想拯救者 M600 无线游戏鼠标|自定义驱动程序安装说明
  • 研究整除的性质——最大公约数(GCD)和最小公倍数(LCM)
  • JavaScript基础-作用域概述
  • 【品铂科技工业生产应用案例解析】
  • 使用DeepSeek制作可视化图表和流程图
  • vue处理接口返回EventStream数据并进行展示
  • 广东进入“倒水模式”,珠江防总、珠江委已启动Ⅳ级应急响应
  • 贯彻落实《生态环境保护督察工作条例》,充分发挥生态环境保护督察利剑作用
  • 梅花奖在上海|秦海璐:演了15年《四世同堂》,想演一辈子
  • 上海青少年书法学习园开园:少年以巨笔书写《祖国万岁》
  • 北方首场高温将进入鼎盛阶段,江南华南多地需警惕降雨叠加致灾
  • 海外市场,押注中国无人驾驶龙头