Vben Admin 源码学习:状态管理-错误日志
0x00 前言
本文将对 Vue-Vben-Admin 的状态管理实现源码进行分析解读,耐心读完,相信您一定会有所收获!
0x01 errorLog.ts 错误日志
文件 src\store\modules\errorLog.ts 声明导出一个store实例 useErrorLogStore 、一个方法 useErrorLogStoreWithOut()用于没有使用 setup 组件时使用。
// 错误日志存储实例
export const useAppStore = defineStore({
id: 'app-error-log',
state: {},
getters: {}
actions:{}
});
export function useErrorLogStoreWithOut() {
return useErrorLogStore(store);
}
State / Getter
状态对象定义了错误日志信息数组、错误日志信息总数。
state: (): ErrorLogState => ({
errorLogInfoList: null, // Nullable<ErrorLogInfo[]>
errorLogListCount: 0,
}),
getters: {
// 获取错误日志 默认空数组
getErrorLogInfoList(): ErrorLogInfo[] {
return this.errorLogInfoList || [];
},
// 获取错误日志总数量
getErrorLogListCount(): number {
return this.errorLogListCount;
},
},
errorLogInfoList 是一个名为 ErrorLogInfo 对象数组,记录了错误详细信息,包含错误类型、错误产生错文件信息、错误名称、错误信息、调用堆栈信息、错误详情、页面url、错误发生时间。
export interface ErrorLogInfo {
type: ErrorTypeEnum; // 错误类型
file: string; // 产生错误文件
name?: string; // 错误名称
message: string; // 错误信息
stack?: string; // 调用堆栈信息
detail: string; // 错误详情
url: string; // 页面url
time?: string; // 发生时间
}
错误类型有4种,分别为 Vue异常、 脚本错误、 静态资源异常、 promise异常。
// 错误类型
export enum ErrorTypeEnum {
VUE = 'vue',
SCRIPT = 'script',
RESOURCE = 'resource',
AJAX = 'ajax',
PROMISE = 'promise',
}
Actions
addErrorLogInfo 方法用于添加错误日志,接受类型为ErrorLogInfo 的参数,使用 展开语法(Spread syntax) 简洁的构造方式进行数组和对象构造。
- 更新错误日志时间属性。
- 将日志信息加入名为
errorLogInfoList的数组中。 - 同时更新错误日志总数(
errorLogListCount)+1。
addErrorLogInfo(info: ErrorLogInfo) {
const item = {
...info,
time: formatToDateTime(new Date()),
};
this.errorLogInfoList = [item, ...(this.errorLogInfoList || [])];
this.errorLogListCount += 1;
},
setErrorLogListCount 方法用于重置错误日志总数数值。
setErrorLogListCount(count: number): void {
this.errorLogListCount = count;
},
addAjaxErrorInfo 方法用于在ajax请求错误后触发,将返回的错误信息格式化后,调用 addErrorLogInfo方法将其添加至系统全局数组中。
addAjaxErrorInfo(error) {
const { useErrorHandle } = projectSetting;
if (!useErrorHandle) {
return;
}
const errInfo: Partial<ErrorLogInfo> = {
message: error.message,
type: ErrorTypeEnum.AJAX,
};
if (error.response) {
...
}
this.addErrorLogInfo(errInfo as ErrorLogInfo);
},
需要在项目配置 src/settings/projectSetting.ts中开启,将useErrorHandle属性值设置 true ,默认不开启。
// src/settings/projectSetting.ts
// 是否使用全局错误捕获
useErrorHandle: true,
使用 Partial 将类型定义的所有属性都修改为可选。
声明了一个错误日志对象,仅定义了类型和消息两个属性值。
其余的属性值通过对 error.response 对象内容进行解构,然后进行对象属性赋值。
const errInfo: Partial<ErrorLogInfo> = {
message: error.message,
type: ErrorTypeEnum.AJAX,
};
if (error.response) {
const {
config: { url = '', data: params = '', method = 'get', headers = {} } = {},
data = {},
} = error.response;
errInfo.url = url;
errInfo.name = 'Ajax Error!';
errInfo.file = '-';
errInfo.stack = JSON.stringify(data);
errInfo.detail = JSON.stringify({ params, method, headers });
}
最后调用addErrorLogInfo方法,添加错误日志信息。
this.addErrorLogInfo(errInfo as ErrorLogInfo);
0x02 参考
Vben Admin 源码学习:状态管理-错误日志的更多相关文章
- Vben Admin 源码学习:状态管理-角色权限
前言 本文将对 Vue-Vben-Admin 角色权限的状态管理进行源码解读,耐心读完,相信您一定会有所收获! 更多系列文章详见专栏 Vben Admin 项目分析&实践 . 本文涉及到角 ...
- Vben Admin 源码学习:项目初始化
0x00 前言 Vue-Vben-Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案考. 本系列本着学习参考的目 ...
- Linux 2.6 源码学习-内存管理-buddy算法
核心数据结构 linux 2.6 的内存管理支持NUMA(Non Uniform Memory Access Achitecture),即非一致内存访问体系,在该体系中存在多个CPU,并且拥有分离的存 ...
- ThinkPHP5.0源码学习之注册错误和异常处理机制
在base.php文件中,用一句代码\think\Error::register();实现错误和异常处理机制的注册. // 注册错误和异常处理机制 \think\Error::register(); ...
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- Spring5.0源码学习系列之事务管理概述
Spring5.0源码学习系列之事务管理概述(十一),在学习事务管理的源码之前,需要对事务的基本理论比较熟悉,所以本章节会对事务管理的基本理论进行描述 1.什么是事务? 事务就是一组原子性的SQL操作 ...
- Qt Creator 源码学习笔记03,大型项目如何管理工程
阅读本文大概需要 6 分钟 一个项目随着功能开发越来越多,项目必然越来越大,工程管理成本也越来越高,后期维护成本更高.如何更好的组织管理工程,是非常重要的 今天我们来学习下 Qt Creator 是如 ...
- 【Spark2.0源码学习】-1.概述
Spark作为当前主流的分布式计算框架,其高效性.通用性.易用性使其得到广泛的关注,本系列博客不会介绍其原理.安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续 ...
- Mybatis源码学习之整体架构(一)
简述 关于ORM的定义,我们引用了一下百度百科给出的定义,总体来说ORM就是提供给开发人员API,方便操作关系型数据库的,封装了对数据库操作的过程,同时提供对象与数据之间的映射功能,解放了开发人员对访 ...
随机推荐
- 2022DASCTF X SU 三月春季挑战赛 Calc
查看代码 #coding=utf-8 from flask import Flask,render_template,url_for,render_template_string,redirect,r ...
- victoriaMetrics库之布隆过滤器
victoriaMetrics库之布隆过滤器 代码路径:/lib/bloomfilter 概述 victoriaMetrics的vmstorage组件会接收上游传递过来的指标,在现实场景中,指标或瞬时 ...
- intel 82599网卡(ixgbe系列)术语表
Intel® 82599 10 GbE Controller Datasheet 15.0 Glossary and Acronyms 术语表 缩写 英文解释 中文解释 1 KB A value of ...
- 帝国CMS如何互相转移分表之间的数据
最近发现帝国CMS文章数据添加太多到某一张分表中了,如图 这是极其不合理的,需要优化下,所以这篇文章要告诉大家的也就是如何互相转移分表之间的数据. 我现在要将:phome_ecms_news_data ...
- Java语言学习day32--8月07日
###07正则表达式邮箱地址验证 * A: 正则表达式邮箱地址验证 * a: 案例代码 public class RegexDemo2 { public static void main(String ...
- go 中 select 源码阅读
深入了解下 go 中的 select 前言 1.栗子一 2.栗子二 3.栗子三 看下源码实现 1.不存在 case 2.select 中仅存在一个 case 3.select 中存在两个 case,其 ...
- python基础练习题(题目 回文数)
day21 --------------------------------------------------------------- 实例030:回文数 题目 一个5位数,判断它是不是回文数.即 ...
- liunx对磁盘进行配额限制
说明,我们给你一个分区进行磁盘配额进行限制 1.首先我们要进行那个分区进行限制,通过修改配置文件加上uquota ,然后再重启一下系统 二.quota 命令用于管理设备的磁盘容量配额,语法格式为 xf ...
- day02 真正的高并发还得看IO多路复用
教程说明 C++高性能网络服务保姆级教程 首发地址 day02 真正的高并发还得看IO多路复用 本节目的 使用epoll实现一个高并发的服务器 从单进程讲起 上节从一个基础的socket服务说起我们实 ...
- CentOS 8迁移Rocky Linux 8手记
前言 由于CentOS 8的支持已经到期了,.NET 6也不支持了,然后也无法升级,导致使用起来已经非常不便,无奈只有迁移服务器这个选项了. 选择发行版本一直是一个比较头疼的问题,首先我不是专门运维的 ...