【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard
记一次Bug排查
今日在做尚硅谷的商品甄选项目时,遇到无法登录的问题:报错Uncaught (in promise) Error: Infinite redirect in navigation guard
一开始我去搜CSDN,都说是路由的问题,我对前端也不了解,试着改了一下,发现没有用。我怀疑是前端包的问题,于是我重新下载解压了若干次资料中的前端包 —— 最原始的模板,下载完依赖的模板,甚至所有前端代码都写完的代码,都还是那个问题。
前端模板刚拿过来时好用的,但在进行了一系列修改后,就出现登录界面一直转圈进不去报错的问题了。我从头开始,重复每一步的修改,然后去看界面有没有问题。
我注意到,当我修改完后端接口,并把api路径修改为自己的路径后,就出现错误了。这时,我才想起来打开F12查看Network,发现getUserinfo这个接口被调了10多次,我发现问题不对了,明明只点击了一次登录,为什么会调这么多次。
我去前端代码里搜寻getUserinfo这个接口的调用,发现有这样一段代码:
if (!userinfo) {try {// 获取用户信息await getUserinfo()} catch (err) {loadingInstance.close()return false}return to.fullPath
}
这段代码当userinfo为空时,就会一直调用getUserinfo()这个方法,难道我获取userinfo都是空吗?于是在控制台打印userinfo,竟然真的是清一色的null!
看来是后端出了问题,我再到后端去看,后端有一个controller返回的用户信息是SysUser类
@GetMapping("/getUserInfo")public Result<SysUser> getUserInfo(@RequestHeader(name = "token") String token) {// 1.从请求头获取token// 2.根据token从redis查询用户信息SysUser sysUser = sysUserService.getUserInfo(token);// 3.返回用户信息return Result.ok(sysUser);}
于是我进行sysUser的打印,果然也为空,我继续追溯到sysUserService服务中的getUserInfo()方法,这个方法是根据token从redis中查询到存储的用户信息。
public SysUser getUserInfo(String token) {//redis取数据String userJson = redisTemplate.opsForValue().get(RedisKeyEnum.USER_LOGIN + token);System.out.println("userJson:"+userJson);return JSON.parseObject(userJson, SysUser.class);}
乍一看我还没发现这个get()方法有啥问题,但当我与上面写的redis的set()方法作对比时,恍然大悟:
// redis存数据
redisTemplate.opsForValue().set(RedisKeyEnum.USER_LOGIN.getValue() + token,JSON.toJSONString(sysUser),7, TimeUnit.DAYS);
发现没?key不一样!
在set的时候是RedisKeyEnum.USER_LOGIN.getValue(),而在get的时候就忘了加getValue()了,结果当然不对,自然就查不到对应的用户信息,前端自然会出问题了。
到头来还是个低级错误啊。。。
所以在自己做项目时,界面上出现了问题,第一反应是看后端请求有没有问题,而不是抓着前端不放,后台管理项目的前端大部分都是既定模板,只要修改正确,不会出啥问题,往往后端的一些小纰漏才是问题的根源。
相关文章:
【Bug排查】Uncaught (in promise) Error: Infinite redirect in navigation guard
记一次Bug排查 今日在做尚硅谷的商品甄选项目时,遇到无法登录的问题:报错Uncaught (in promise) Error: Infinite redirect in navigation guard 一开始我去搜CSDN,都说是路由的问题,我对前端也不了解,试着改了一下&…...
ant使用第三方任务
ant提供了一个插件机制来使用第三方的任务。为了使用第三方的任务,需要做两步: 将它们的实现放在ant能找到的地方。声明任务 声明任务的几种方法: 声明一个任务:利用<taskdef name"taskname" classname"Impl…...
MySQL 性能分析
MySQL 性能分析 对 mysql 进行性能分析,主要就是提升查询的效率,其中索引占主导地位。对 mysql 进行性能分析主要有如下几种方式: 方式一:查看 sql 执行频次 show global status like ‘Com_______’; // global 表示全局 show s…...
【MySQL】数据库——库操作
文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码创建数据库修改字符集修改校验集验证规则对数据库的影响utf8_general_ci ——不区分大小写utf8_bin ——区分大小…...
Python 轻量 ORM peewee 上手
介绍 有时候需要用 Python 直接操作数据库, 手工撸 SQL 倒也不是不能行, 但是总觉得有点背离了 人生苦短, 我用 Python 的初心, 习惯了 SQLAlchemy 的直接操作后, 就变懒了. 但是对于比较简单的数据库操作场景, 再跑一套 SQLAlchemy 又显得有些臃肿, 这次上手轻量 Python ORM …...
微信小程序开发的OA会议之会议,投票,个人中心的页面搭建及模板
目录 一.自定义组件 1.1.创建 1.2.定义 1.3.编写 1.4.使用 二.会议 2.1.数据 2.2.显示 2.3. 样式 三.个人中心 3.1.页面 3.2.样式 四.投票 4.1.引用 4.2.数据 4.3.页面 4.4.样式 好啦今天就到这里了,希望能帮到你哦!!&…...
决策树-入门
1、认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法 怎么理解这句话?通过一个对话例子 想一想这个女生为什么把年龄放在最上面判断!&a…...
使用Redis发布订阅模式实现 Session共享
其实并不是实现session共享,而是通过redis的发布订阅,让所有集群的服务器,都让自己的session发送一下消息。比如说userId在第35台服务器上, 有100台服务器,那么第1台服务器收到消息,需要通知userId…...
安达发|AI在APS生产计划排程系统中的应用与优势
随着科技的不断发展,人工智能(AI)已经在许多领域取得了显著的成果。在生产管理计划系统中,AI技术的应用也日益受到关注。本文将探讨如何将AI人工智能用在生产管理计划系统上,以提高生产效率、降低成本并优化资源配置。…...
国产低功耗MCU芯片:Si24R03
Si24R03集成了基于RISC-V核的低功耗MCU和工作在2.4GHz ISM频段的无线收发器模块,是一款高度集成的低功耗SOC片。 应用领域: 1、物联网 2、智N门锁 3、电机控制 4、消费电子 5、工业控制 其无线收发器模块是专为低功耗无线场合设计,在关…...
【Java】学生管理系统项目演示
目录 学生管理系统 学生管理系统代码思路分析 nextLine() 和 nextInt() 区别 学生管理系统 需求:实现对学生的增删改查功能,学生(学号,姓名,年龄,地址)字段 学生管理系统代码思路分析 定义学…...
Rust错误处理
返回值和错误处理 panic 深入剖析 主动调用 fn main() {panic!("crash and burn"); }backtrace 栈展开 panic 时的两种终止方式 当出现 panic! 时,程序提供了两种方式来处理终止流程:栈展开和直接终止 何时该使用 panic! 先来一点背景知…...
Golang操作数据库简单示例
目录 准备工作准备数据创建项目连接数据库查询数据修改数据插入数据删除数据释放资源完整代码最终执行结果 准备工作 在开始之前,你需要确保自己安装了Golang的编程环境,安装MySQL数据库,有一个可以用于编写代码的编辑器或IDE工具。我在这里…...
亚马逊测评,买家号支付不了、砍单率高是什么问题,需要怎么解决
下半年旺季很多卖家都在使用自养号测评给产品冲一波权重,但是很多朋友会遇到下不了单或者砍单率过高等问题。有人以为是支付卡的问题,也有人觉得是IP被关联了。其实他们讲的也没错,但是,亚马逊风控不会针对某个点去进行检测&#…...
B. Jellyfish and Game-Codeforces Round 902 (Div. 2)
B. Jellyfish and Game 交换k轮使得第一个同学拥有数值总数最大; 很容易看出这道题需要判断k奇偶数。 当k是奇数时可以看作第一个同学操作一轮。 k为偶数可以看作两个同学各操作一轮。 #include<iostream> #include<vector> #include<algorithm>…...
Linux下的命令行参数和环境变量
命令行参数 什么是命令行参数 命令行参数是指在执行命令行程序时,给程序传递的额外参数。在Linux终端中,命令行参数通常通过在命令后面添加空格分隔的参数来传递。 Linux下以main函数举例说明 #include<stdio.h>int main(int argc char* argv[])…...
语音芯片KT142C两种音频输出方式PWM和DAC的区别
目录 语音芯片KT142C两种音频输出方式PWM和DAC的区别 一般的语音芯片,输出方式,无外乎两种,即dac输出,或者PWM输出 其中dac的输出,一般应用场景都是外挂功放芯片,实现声音的放大,比如常用的音箱…...
Kotlin 协程的挂起和阻塞的区别
一,简介 Kotlin协程引入了非常强大的异步编程模型,通过挂起而不是阻塞来实现并发操作。以下是有关Kotlin协程挂起和阻塞的详细介绍: 挂起(Suspending): 挂起是指一个协程的执行可以在不阻塞线程的情况下暂…...
解决Github Markdown图片显示残缺的问题
title: 解决Github Markdown图片显示残缺的问题 tags: 个人成长 categories:杂谈 在Github存放Markdown文档,如果图片没有存放在Github服务器上,github会尝试生成Github图片缓存,使用Github图片缓存,进行实际的展示。但比较蛋疼的…...
[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发
文章目录 Vue在混合开发中的特点创建MAUI项目创建Vue应用使用element-ui组件库JavaScript和原生代码的交互传递根组件参数从设备调用Javascript代码从Vue页面调用原生代码 读取设备信息项目地址 .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法ÿ…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
