前端转换bigInt,axios拦截器失效

news2024/10/7 8:21:42

前端转换bigInt,axios拦截器失效

  • 关于bigInt的使用
    • 切换雪花ID
    • 解决精度丢失问题
      • 进度丢失,前端不支持bigInt
      • 解决问题
    • 拦截器失效
    • 验证及解决

关于bigInt的使用

这篇文章算是使用中的小笔记吧,主要是我自己搜索没找到直接的方法😓,不知道是不是关键词不对❓在这里记录一下。

切换雪花ID

因为业务数据的需要,数据库将原有的自增Id转换成了雪花Id,主要是解决分布式系统中数据问题,我这里是对原来双主键的模式进行了一个改进,更多的雪花Id知识可以自己去了解一下,这个算法来源于 “世界上,没有完全相同的两片雪花”,下面主要讲前端的应用,也是问题出现和解决的过程。

解决精度丢失问题

进度丢失,前端不支持bigInt

当对后端程序改进之后,主键变了,那对应的前端数据也发生了改变,替换了主键之后,理论上就可以用了,但事实上并不是这样。动态菜单只加载了一部分。
在这里插入图片描述
让我们来看看数据,很明显的数据精度丢失了,后端查询的数据主键全部发生了错误,同Id被过滤了,加载不出来。
在这里插入图片描述

解决问题

雪花Id不是新出的东西,总不至于我一个人用吧,找广大网友取取经,很容易就找到了,使用 json-bigint 在相应的时候进行处理数字可以解决这个问题

  1. 安装 json-bigint
npm install json-bigint
  1. 拦截器对返回数据处理
//创建一个axios实例 
const instance = axios.create({
   // withCredentials: true,
   timeout: 5000  //5秒
})

instance.defaults.transformResponse = [(data: any) => {
   return JSONBig.parse(data)
}]

再来验证一下我们的数据,已经得到了处理,菜单也正常的加载了

在这里插入图片描述

拦截器失效

本以为前端修改好了,没有对原有功能的验证,然而,再一次未登录的请求(无token)中发现了问题,页面并没有自动跳转到登录页页面,拦截器出现问题了。

在这里插入图片描述

将数据输出出来:

在这里插入图片描述

浏览器已经判断了是401,鉴权失败,但是拦截器未能正确获取到错误信息,后面的判断自然没有作用了。

验证及解决

那么问题应该就是我刚加的 json-bigint了,在 axios 的拦截器判断之前, json-bigint将返回的错误处理掉了。简单的看下 json-bigint 的描述,对于非json格式的数据转换会报错,但是,这里并不一定是这个问题,输出一下 transformResponse 中到底收到了一个什么。
在这里插入图片描述

可以看见,在这里输出了一个空字符串,在这里将空字符串传给了 axios 的拦截器,当然是没有数据的,那么这并不是想要的,我想要原始的错误。

在这里插入图片描述

因此,在transformResponse 中过滤掉数据为空字符串的情况就可以了。

instance.defaults.transformResponse = [(data: any) => {
    if (data != "")
        return JSONBig.parse(data)
    else
        return;
}]

可以看见,拦截器收到了正确的错误返回。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSH隧道功能

随着互联网的普及和发展,越来越多的企业需要申请公网IP地址。(公网IP地址是指可以在互联网上直接访问的P地址,可以用于建立网站、远程办公、视频监控等应用。) 而公网IP费用较高,笔者在某搜索软件上搜了一下&#xff…

科研创新服务平台性能分析案例

前言 信息中心老师反应,用户反馈科研创新服务器平台有访问慢的情况,需要通过流量分析系统来了解系统的运行情况,此报告专门针对系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统,使用流量分析系统提供实时和历史原…

笑谈测试员躺着也中枪的那些事

在近9年的软件测试职业生涯中,多少遇到一些奇奇怪怪的事。而最悲催的莫过于那些自己躺着也中枪的事,如果处理不好惹火烧身,直接被“毙掉”也不无可能。 下面就摆摆那些事儿(其中可能因人老记忆衰退严重,与事实间有一定的夸大成分&…

【字节流】复制文本文件

字节流复制文本文件 1.需求: 把“D:\\浏览器下载\\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt” 2.分析: ①复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入另一个文件…

jenkins手把手教你从入门到放弃03-安装Jenkins时web界面出现该jenkins实例似乎已离线

简介 很久没有安装jenkins了,因为之前用的的服务器一直正常使用,令人郁闷的是,之前用jenkins一直没出过这个问题。 令人更郁闷的是,我尝试了好多个历史版本和最新版本,甚至从之前的服务器把jenkins在跑的程序打包copy…

c++避免头文件多次包含的方法

c避免头文件多次引用的方法 方法1方法2例子头文件包含多次导致类重定义使用方法1避免重复定义使用方法2避免重复定义 方法1 把#pragma once指令放在文件的开头 方法2 用 #ifndef 条件编译指令。 #ifndef _GIRL_#define _GIRL_//代码内容。 #endif 例子 头文件包含多次导致…

用百度地图api获取当前定位,获取经纬度——前端笔记

问题&#xff1a; 做一个按钮&#xff0c;点击后可以获取到当前位置的经纬度&#xff0c;并渲染地图。 效果如下: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>获取当前定位测试<…

极智开发 | ubuntu交叉编译aarch64 boost

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍一下 ubuntu交叉编译aarch64 boost。 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xf…

目录穿越漏洞

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录穿越漏洞 目录穿越漏洞 目录穿越不仅可以访问服务器中的任何目录&#xff0c;还可以访问服务器中任何文件的内容。例如&#xff0c;攻击者通过浏览器访问…/……

ES6 Generator和Promise

目录 Generator 如何创建Generator函数 ? 模拟发起异步请求 Promise 实例化 实例方法 工厂函数 静态方法 Promise.all([p1,p2,....]) Promise.race([p1,p2,....]) Promise.any([p1,p2,....]) Promise.allSettled([p1,p2,....]) Generator Generator是ES6提供的一种…

Day56|583. 两个字符串的删除操作 、72. 编辑距离

583. 两个字符串的删除操作 1.题目&#xff1a; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: …

SSD 常用概念

1. 写入放大&#xff08;WA&#xff09; 写入放大会对闪存 P / E 次数造成磨损。在存储过程中&#xff0c;数据会在闪存上被反复的移动整理&#xff0c;造成闪存上的写入量大于实际文件写入量&#xff0c;这个过程称为写放大。 写放大 主控实际写入的数据量 / 用户想要写入的数…

GDB调试——学习笔记

文章目录 GDB是什么GDB调试的一般步骤1. 编译生成带源代码信息的可执行文件2. 启动调试3. 进行调试&#xff1a;设置断点、查看变量、寻找BUG4. 退出调试 GDB是什么 GDB就是一个程序代码调试的工具。 GDBGCC开发环境 GDB调试的一般步骤 1. 编译生成带源代码信息的可执行文件…

机器学习1

核心梯度下降算法&#xff1a; import numpy as np from utils.features import prepare_for_trainingclass LinearRegression:def __init__(self,data,labels,polynomial_degree 0,sinusoid_degree 0,normalize_dataTrue):"""1.对数据进行预处理操作2.先得到…

【Linux】进程信号 -- 信号产生 | 系统调用、硬件、软件的信号发送

信号的旧识引入信号引入signal调用 系统调用向目标进程发送信号模拟实现一个kill命令raise给自己发送任意信号abort给自己发送指定信号(6)SIGABRT 硬件异常产生信号除0异常野指针访问异常 软件条件产生信号拓展 总结思考进程退出时核心转储问题小实验 信号的旧识引入 kill -l是…

手动实现 Tomcat 底层机制+ 自己设Servlet 问题分析

文章目录 手动实现 Tomcat 底层机制 自己设Servlet问题分析完成小案例运行效果 此项目用maven至于怎么配置在下一篇文章创建cal.htmlCalServlet.java# 实现步骤 web.xmlWebUtils 问题:Tomcat 整体架构分析测试分析&#xff1a;抓包情况 手动实现 Tomcat 底层机制 自己设Servlet…

ALPAGASUS : TRAINING A BETTER ALPACA WITH FEWER DATA♢

ALPAGASUS : TRAINING A BETTER ALPACA WITH FEWER DATA♢ IntroductionMethod参考 Introduction 本文证明了数据的质量的重要性要大于数量。作者通过与GPT交互的方法过滤了Alpaca52k的数据&#xff0c;剩下9k&#xff0c;对二者分别微调&#xff0c;通过实验对比&#xff0c;…

软件测试行业的困境和迷局

中国的软件测试虽然起点较高&#xff0c;但是软件测试的发展似乎没有想象中那么顺利。 其实每个行业除了有自身领域外&#xff0c;还有属于自己的“生态系统”。属于软件测试的生态系统主要包括后备软件测试人员、软件开发人员和软件管理决策者。后备软件测试人员是软件测试的…

获取gitlab上项目列表过程及脚本

一、使用Gitlab API查询项目列表 1、首先获取访问令牌&#xff1a;在Gitlab上生成一个访问令牌&#xff0c;以便能够使用API进行身份验证。可以在GitLab的用户设置中创建一个访问令牌。 2、使用curl发送GET请求的命令&#xff1a; curl --header "PRIVATE-TOKEN: <you…

若依字典使用

若依字典使用 此文章使用的若依是大于3.7.0版本的 JS文件配置 main.js中引入全局变量和方法 import DictData from /components/DictData DictData.install()DictData.js配置 可以从DictData.js中看出在install方法中调用了字典查询接口&#xff0c;在install方法中可以做…